Tag: 蛮力

如何随机迭代一个大范围?

我想随机迭代一个范围。 每个值只访问一次,最终将访问所有值。 例如: class Array def shuffle ret = dup j = length i = 0 while j > 1 r = i + rand(j) ret[i], ret[r] = ret[r], ret[i] i += 1 j -= 1 end ret end end (0..9).to_a.shuffle.each{|x| f(x)} 其中f(x)是对每个值进行操作的某个函数。 Fisher-Yates shuffle用于有效地提供随机排序。 我的问题是shuffle需要在数组上运行,这并不酷,因为我正在使用天文数字大的数字。 Ruby会快速消耗大量的RAM,试图创建一个怪异的数组。 想象一下用(0..9) (0..99**99)替换(0..9) (0..99**99) 。 这也是以下代码不起作用的原因: tried = {} […]