首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步随机数

同步随机数
EN

Stack Overflow用户
提问于 2011-07-02 01:20:16
回答 4查看 2.5K关注 0票数 1

我有2台设备,我正在寻找一种方法来同步他们之间的随机数生成。

更多背景知识:两台设备连接,一台设备向另一台设备发送包含数据集的文件。然后在两个设备上加载数据集。数据以不同级别的随机化方式显示。我希望显示在设备之间同步,但是仍然是随机的。

一个概念性的例子:取一堆图片。堆栈的副本被发送到远程设备并存储以供将来使用。然后在两个设备上以相同的方式对堆栈进行混洗,以便在每个设备上绘制第一张图片将产生相同的输出。这过于简单了,我的应用程序中需要更多的随机数,所以共享排序顺序等优化是不适用的……

分解:我需要一个简单的方法来从两个设备上的相同随机数池中抽出。我不知道在设备同步之前可能会发生多少随机抽奖,但一旦同步,应该可以预测它们将抽出相同数量的随机数,因为它们使用相同的数据集,但是在进入下一批之前,其中一个可能会抽出比另一个更多的随机数(这将需要重新同步随机数据)。

我希望通过能够生成相同的位置来避免在显示时已经在数据集中传输的每个实体的排序顺序、位置信息等(这也引发了结构问题,因为项目最初并不是为了共享该信息而设计的),这要求随机数字以相同的顺序出现。

如有任何想法或建议,我们将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-02 01:23:55

您可以使用LCG算法并为生成设置相同的种子。因为LCG算法是确定性的,所以只要您用相同的种子播种两台设备,它们就会产生完全相同的伪随机数。

您可以在此处找到有关LCG算法的更多信息:

Linear congruential generator

此LCG例如由java.util.Random使用。

票数 8
EN

Stack Overflow用户

发布于 2011-07-02 01:25:56

如果您在每个设备上为rand()提供相同的种子,即srand( SEED );,则保证每次出来的(伪)随机数都是相同的,并且您可以无限期地拉出数字,而无需重新播种。

票数 1
EN

Stack Overflow用户

发布于 2011-07-02 01:29:44

大多数随机数生成器都允许您设置“种子”。如果您在两台不同的机器上创建两个随机数生成器,实现完全相同的生成算法(甚至不需要是相同类型或运行相同的操作系统),然后为两台机器提供相同的“种子”值,则它们都将生成完全相同的随机数序列。

因此,您的“同步”实际上应该只需要将一个数字(通常本身是随机选择的数字)从第一台机器转移到第二台机器。然后两台机器都使用相同的数字作为“种子”。

(我会查找iPhone随机数生成器的细节,但苹果文档网站显然受到了明尼苏达州政府停摆的影响。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6551186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档