6

我正在 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]。我的意思是,赔率是多少?我想改善它的运行时间。谁能为我的问题提出更好的解决方案?

谢谢!

4

2 回答 2

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
于 2013-04-20T13:27:12.723 回答
1

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

于 2013-04-20T12:22:30.143 回答