【问题标题】:Linear congruential generator testing full period线性同余发生器测试全周期
【发布时间】:2020-09-17 18:27:57
【问题描述】:

编写一个程序来演示一个带模数的线性同余生成器 ??? = 2 ???和恒定???? = 1,为了实现全周期,乘数????一定是 等于4??? + 1. 考虑 ???? = 5、7 和 10;和 ???? =2 和 9。您还应该考虑 与此不匹配的乘数的两个值。

我的问题是我有在 Python 中运行它的代码。我得到的建议是

def lcg(modulus, a, c, seed):
    """Linear congruential generator."""
    while True:
        seed = (a * seed + c) % modulus
        yield seed

但是,问题没有提到种子值,也不知道如何判断它是否会达到一个完整的周期。任何指导将不胜感激

【问题讨论】:

    标签: python random modulus


    【解决方案1】:

    什么是种子?

    变量seed 指的是RNG(随机数生成器)的状态。您必须具有某种可更改的状态,即使它是文件中的位置或真正的随机数,否则 RNG 将在每次调用时返回相同的数字。

    对于 LCG,种子只是最近的值。您将其保存在驱动程序例程中,或作为某种内部状态整数。它通常是一个可选参数;您在第一次调用“种子”时提供它,或者开始序列。

    如何判断我是否得到了完整的序列?

    由于 LCG 状态完全由最新值描述,因此它会返回一个恒定的值循环,只要您使用它就会重复该循环。要对此进行测试,您可以简单地从种子 0 开始(任何值都可以),然后计算再次获得该值需要多少次迭代。

    您还可以根据 LCG 参数确定循环长度。这是一个针对学生的研究项目(从维基百科开始)。

    这是否消除了您的担忧?

    【讨论】:

      猜你喜欢
      • 2019-11-29
      • 1970-01-01
      • 2019-11-20
      • 2015-11-08
      • 1970-01-01
      • 2015-08-22
      • 2013-10-09
      • 1970-01-01
      • 2011-12-12
      相关资源
      最近更新 更多