博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lua连续随机数
阅读量:4451 次
发布时间:2019-06-07

本文共 1629 字,大约阅读时间需要 5 分钟。

号外:惭愧,工作后几乎没有写博客了,其实是有时间的(每周单休),只是厌烦对着屏幕了,还有懒。

   现在老板换人了,时间会多点,估计正常就每周双休了,决定还是每周写两篇(不一定是love2d),

   写不出就翻译老外的。

有两种方法:

1、把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次

2、先生成一个连续的数字表t,每次随机一个数n,把t[n]保存,并移除t[n]

 

代码如下:

--产生1~~m,若有n的则m~~n的数字表function table.fillNum(m,n)    local j,k    if n then       j=m       k=n    else        j=1        k=m    end    local t={}    for i=j,k do        table.insert(t,i)    end    return tend--产生不相同的从m到n,一共cnt个随机数表function math.randomx( m,n,cnt ) --方法1    if cnt>n-m+1 then        return {}    end    local t = {}    local tmp = {}    math.randomseed(os.time())    while cnt>0 do        local x =math.random(m,n)        if not tmp[x] then            t[#t+1]=x            tmp[x]=1            cnt=cnt-1        end    end    return tend--同上function math.randomEx(m,n,cnt) --方法2    if cnt>n-m+1 then        return {}    end    local x=0    local t={}    local tmp=table.fillNum(m,n)    math.randomseed(os.time())    while  cnt>0 do       x=math.random(1,n-m+1)        table.insert(t,tmp[x])       table.remove(tmp,x)       cnt=cnt-1       m=m+1          end    return tendt=math.randomx(11, 25, 6)for i=1,6 do  print(t[i])endprint("...........")t=math.randomEx(11, 25, 6)for i=1,6 do  print(t[i])end

性能测试:

t1=os.clock()for i=1,10000 do  math.randomEx(11,15,5)endt2=os.clock()for i=1,10000 do  math.randomx(11,15,5)endt3=os.clock()print((t3-t2)-(t2-t1))

两种方法差别不是很大,而且当在10000后再加2个0时,就需要很长时间了,或者挂掉。

如果需要在相隔较短的时间内生成相差较大的随机数可以把math.randomseed(os.time())

替换为math.randomseed(tostring(os.time()):reverse():sub(1, 6))。

因为在相隔较短时间时os.time()相差不大,reverse可以把字符串倒转,这样就相差大了,详见。

转载于:https://www.cnblogs.com/xdao/p/lua_random.html

你可能感兴趣的文章
优化杭州某著名电子商务网站高并发千万级大型数据库经验之- SQL语句优化(转)...
查看>>
WPF——TargetNullValue(如何在绑定空值显示默认字符)
查看>>
Linux之crontab
查看>>
清除浮动
查看>>
JAVA优化建议
查看>>
Docker --- 安装MySQL
查看>>
CenOS+宝塔(模拟)上线博客项目
查看>>
Linux改变语言设置的命令
查看>>
loadrunner Vugen-Tools General-Options-Replay设置
查看>>
redis限频
查看>>
Floyd判圈算法
查看>>
接口,lambda表达式与内部类(二)
查看>>
Phabricator是什么,代码审查工具
查看>>
Java虚拟机类加载机制
查看>>
UITextView,UIWebView 直接显示html代码
查看>>
DirectX:函数可以连接任意两个filter 分类: Direct...
查看>>
Android APP开发入门教程-Button 分类: JAVA ...
查看>>
WustOJ 1575 Gingers and Mints(快速幂 + dfs )
查看>>
js中,for循环里面放ajax,ajax访问不到变量以及每次循环获取不到数据问题总结...
查看>>
算法:求从1到n这n个整数的十进制表示中1出现的次数-- python 实现
查看>>