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] ~= nil になると、数値が再びランダム化されるように、rndom[num] に値を設定します。私の問題は、「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 に答える