Ruby 1.9.2中的分布式顺序随机数生成
-
01-10-2019 - |
题
这 Random
在特定种子和范围内,Ruby 1.9.2中的类可保证以相同顺序生成随机数。例如:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
但是,假设我想在另一台计算机上生成序列中的下一个数字(不重新生成序列中的较早数字)。考虑到先前的输出,这应该是可能的。有没有办法用 Random
班级?还是我必须写自己的实施 梅森·扭动?
[编辑: 正如下面的评论所指出的那样,实际上不可能确定 Random
实例仅来自输出,因为仅使用状态的一部分(特别是低32位)用于输出。
解决方案
根据马克·安德烈·拉福特(Marc-AndréLafortune)的说法,无法测试,但是可以编辑发电机 这里。因此,这可能有效:
r = Random.new(23)
r.rand(100) # 83
r.rand(100) # 40
File.open("/path/to/file","w") do |f|
Marshal.dump(r,f)
end
# later, may be on another computer
File.open("/path/to/file","r") do |f|
@v = Marshal.load(f)
end
puts @v.rand(100)
不隶属于 StackOverflow