我有2台设备,我正在寻找一种在它们之间同步随机数生成的方法。
更多背景:2个设备连接,一个设备发送另一个包含数据集的文件。然后在两个设备上加载数据集。数据随机显示在各个级别。我希望显示器在设备之间同步,但仍然是随机的。
概念性示例:拍摄一堆照片。堆栈的副本被发送到远程设备并存储以备将来使用。然后在两个设备上以相同的方式对堆栈进行混洗,以便在每个设备上绘制第一个图像将产生相同的输出。这个过分简化,我的应用程序中需要更多随机数,因此共享排序顺序等优化不适用...
分解:我需要一种简单的方法从2个设备上的相同随机数池中提取。我不知道在设备同步之前可能会出现多少随机抽取,但是一旦同步,它们应该可以预测他们将使用相同数量的随机数,因为他们使用相同的数据集,但是有可能可以抽取更多在进入下一批之前(这需要重新同步随机数据),而不是另一个。
我希望避免为显示时已在数据集中传输的每个实体转移排序顺序,位置信息等(这也引起了结构性问题,因为项目最初并未设计为共享该信息)通过能够生成相同的位置,这需要随机数以相同的顺序出现。
非常感谢任何想法或建议。
答案 0 :(得分:8)
您可以使用LCG算法并为生成设置相同的种子。因为LCG算法是确定性的,只要您使用相同的种子为两个设备播种,它们将产生完全相同的伪随机数。
您可以在此处找到有关LCG算法的更多信息:
此LCG例如由java.util.Random。
使用答案 1 :(得分:1)
如果你在每个设备上给rand()
相同的种子,即srand( SEED );
,每次出现的(伪)随机数保证是相同的,你可以继续拉数字在没有重新种植的情况下无限期地出去。
答案 2 :(得分:1)
大多数随机数生成器允许您设置“种子”。如果你创建两个随机数生成器,在两台不同的机器上实现完全相同的生成算法(甚至不需要相同类型或运行相同的操作系统),然后为两台机器提供相同的“种子”值,它们将两者都产生完全相同的随机数序列。
因此,您的“同步”实际上只需要将一个号码(通常是一个随机选择的号码)从第一台机器转移到第二台机器。然后两台机器使用与“种子”相同的数字。
(我会查看iPhone随机数生成器的具体信息,但Apple文档网站显然受到了明尼苏达政府关闭的影响。)
答案 3 :(得分:0)
如果您不总是想要指定种子,则可以简单地将一个设备指定为主设备。当主设备生成随机数时,它会向包含该随机数的其他设备发送消息。