随机化Lua中的数字,没有重复

时间:2013-04-20 12:19:37

标签: random lua

我在Lua做一个项目,涉及随机数字而不重复。这是我的代码

for i = 1, 86000 do
    while rndom[num] ~= nil do
        num = math.random(1,95000)
     end
     rndom[num] = num
     for k=1, 11 do
        file2:write(input[num][k], " ")
     end
     file2:write("\n")
end

基本上它给rndom [num]赋值,这样当随机数重复且rndom [num]〜= nil时,它会再次随机化数字。我的问题是,加载时间太长,因为我的'i'越来越高,并且会有一段时间它会停止。我猜这是因为随机数发生器不能得到一个'nil'的rndom [num]。我的意思是,赔率是多少?我想改善它的运行时间。谁可以建议更好地解决我的问题?

谢谢!

2 个答案:

答案 0 :(得分:4)

最好生成O(N)时间复杂度的排列。

local n = 95000

local t = {}
for i = 1, n do
   t[i] = i
end

for i = 1, 86000 do
   local j = math.random(i, n)
   t[i], t[j] = t[j], t[i]
   for k = 1, 11 do
      file2:write(input[t[i]][k], " ")
   end
   file2:write"\n"
end

答案 1 :(得分:1)

一个简单的解决方案是在获得已有变量时再次使用random,尝试返回下一个可用变量。这样,您可以保证O(N^2)运行时间(最长)。