我在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]。我的意思是,赔率是多少?我想改善它的运行时间。谁可以建议更好地解决我的问题?
谢谢!
答案 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)
运行时间(最长)。