使用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'越来越高,加载时间太长,最终会停止。我猜这是因为随机器无法得到一个rndom[num]为'nil'的数字。我的意思是,这有多大的概率呢?我想提高它的运行时间。有人能提出更好的解决方案吗?

谢谢!

点赞
用户752976
用户752976

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

2013-04-20 12:22:30
用户1847592
用户1847592

最好使用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
2013-04-20 13:27:12