小编voi*_*oid的帖子

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

我想随机迭代一个范围.每个值只访问一次,最终将访问所有值.例如:

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)}
Run Code Online (Sandbox Code Playgroud)

哪个f(x)是对每个值进行操作的函数.一个费雪耶茨洗牌用于有效地提供随机排序.

我的问题是shuffle需要在阵列上操作,这并不酷,因为我正在使用天文数字大的数字.Ruby会快速消耗大量的RAM,试图创建一个怪异的数组.试想一下,替换(0..9)(0..99**99).这也是以下代码不起作用的原因:

tried = {} # store previous attempts
bigint = 99**99
bigint.times {
    x = rand(bigint)
    redo if tried[x]
    tried[x] = true
    f(x) # some function
} …
Run Code Online (Sandbox Code Playgroud)

ruby random loops range brute-force

9
推荐指数
1
解决办法
3178
查看次数

标签 统计

brute-force ×1

loops ×1

random ×1

range ×1

ruby ×1