繁体   English   中英

给定种子和偏移量,生成下一个伪随机值

[英]Generate next pseudo random value given a seed and offset

对于给定的rand实现,是否有可能在给定初始种子和到目前为止对rand的调用次数的情况下,有效地生成序列中的下一个数字?

我想要使​​用rand为模拟中的节点提供时间偏移。 每个节点将使用其唯一的ID作为种子,并使用rand的输出来提供仿真延迟中的抖动。 我希望每个节点都能为其他任何节点计算碰撞的下一个延迟。 我可以访问任何节点的初始种子以及被调用rand的次数。

我想避免必须播种并循环n + 1次才能获得下一个值。 使用rand的通用linux实现,我什至想得到什么?

glibc中的随机数生成器是线性同余生成器,形式为x_ {n + 1} = a * x_ {n} + b mod m的生成器。 对于a,b和m的正确选择可能就足够了。 组合两个或多个可以提高质量。

按这样的顺序前进是很容易的。 x_ {n + k} = a ^ {k} * x_ {n} + b *(a ^ {k}-1)/(a-1)mod m。 将数字提高到幂mod m的位数是线性的,即O(log(number))。 要采用乘法逆,只需使用扩展的欧几里得算法即可。 您只需要做一次。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM