zoukankan      html  css  js  c++  java
  • python3 线性同余发生器 ( random 随机数生成器 ) 伪随机数产生周期的一些探究

    import random
    x=[str(random.randint(0, 5)) for i in range(10)]
    x_str=''.join(x)
    
    y=[str(random.randint(0, 5)) for i in range(100000000)]
    y_str=''.join(y)
    
    if x_str in y_str:
        print("共有多少:")
        print(y_str.count(x_str))
        print('第一个出现位置')
        print(y_str.find(x_str))
    else:
        print("没有")

    如上面代码所示, 突然想起来编程语言中的随机数产生是采用线性同余发生器产生的,那么既然是尾随机数它必然有重复的时候,那么我们有没有可能找到它重复的时候,或者发行一个周期呢,所以由此写了上面的代码。

    注: 该代码比较吃内存没有16G 内存的电脑可能是跑不了上面的代码的。

    一共跑了两次, 结果如下图:

    首先并没有发现什么周期可言,估计这个笨方法是发现不了的,前提是它真的有周期;

    其次, 我们发现及时是5以内的整数, 产生的序列出现重复的时候都是要1000万个数生成以后才会出现重复的序列;

    最后,我们知道伪随机数是会出现重复的,但是我们能遇到的可能性不大,理论上存在,实践中可以不考虑。

    附加:

    如果随机数的产生设置为 100以内的整数,  跑了N多次也没有发现重复的序列。  即修改上面代码:

    random.randint(0, 5)  为
    random.randint(0, 100)


    由此可以发现伪随机数其实还是比较靠谱的。
  • 相关阅读:
    java实验四
    C# 和SQL Server 类型转换
    C# 通过this关键字来扩展方法
    类型转换
    获取屏幕高度,兼容性问题解决
    LinqToDataTable
    jQuery层级元素选择器
    Javascript 常用系统内置函数
    JSON-JQuery常用技巧
    .net 调用SAP RFC函数获取数据的两种方式
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/10187125.html
Copyright © 2011-2022 走看看