【发布时间】:2012-11-19 22:25:30
【问题描述】:
对于给定的rand 实现,是否有可能在给定初始种子和到目前为止对rand 的调用次数的情况下有效地生成序列中的下一个数字?
我想使用rand 为模拟中的节点提供时间偏移。每个节点都将以其唯一的 id 作为种子,并使用rand 的输出来提供模拟延迟中的抖动。我希望每个节点都能够计算任何其他节点的下一个延迟以测量碰撞。我可以访问任何节点的初始种子以及调用 rand 的次数。
我想避免播种和循环n + 1 次以获得下一个值。使用rand 的通用 linux 实现,我想要什么?
【问题讨论】:
-
不,但是构造一个具有此属性的普通伪随机数生成器绝对是微不足道的。只需在种子和循环计数器上使用加密哈希函数。你是用 C 还是 C++ 编码?
-
种子和循环是我能想到的,但如果你缓存你的结果,你就不必继续重新计算。如果您有一个实现,其中每个输出都是以下输出的有效种子,您将节省循环,但通常输出只是以下种子的一部分。
-
@David: C++ 但我相信界面在任何一种情况下都是相同的,我可以根据需要进行调整 - 因此两个标签。
-
@DavidSchwartz:您应该将其添加为答案。
-
@ezpz:您可以将 C++ 代码改编为 C 吗?我印象深刻。 (如果您认为没有区别,那么就没有必要或两者兼而有之。如果有相关的区别,同时说明两者会引起严重的混淆。)