[英]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.