问一个 Linux 下 Python 的随机数发生器的问题

2018-12-05 10:09:57 +08:00
 mathzhaoliang

我有一个 Python 脚本实现了一个随机算法,这个算法执行的步骤是不确定的,它需要调用 Python 的 random 模块中的 random.randint 函数,最后会打印出算法执行的步骤次数。我有一个发现:这个脚本运行的结果经常是一样的,每次都是 8388584 次 (偶尔会给出不同的结果),我在不同的电脑上运行也经常是这个结果。

我的问题是:是不是 Python 的随机数发生器如果不指定种子的话,每次的默认初始种子都是一个固定值?

你可以在 这里 测试一下我的代码。

965 次点击
所在节点    问与答
3 条回复
Xs0ul
2018-12-07 00:19:04 +08:00
应该不是初始种子的问题,手动设了几个都是同样的结果。

不过 8388584 = 2^23 - 24,这个数还是挺巧合的。因为不了解你做的东西,但是我猜这个数可能符合某个特定终止条件
Xs0ul
2018-12-07 00:48:01 +08:00
另外我试了试 size 改成:
10,10,10,次数是 524268 = 2^19 - 20
9,9,9,次数是 262125 = 2^18 - 19
8,8,8,次数是 131054 = 2^17 - 18
是符合 2^k-k-1 形式的数
但是小一点的数,比如 3,3,3
3,3,3,会出现 2036,1013 和 502,对应 k=10,9,8
看起来有几种不同的终止的情况,对应了不同 k
mathzhaoliang
2018-12-07 09:24:05 +08:00
@Xs0ul 谢谢谢谢,你的回答给了我很大的启发,居然发现了次数是 2 的幂减去一个值,感觉和梅森素数的形式很像,我打算去 stackoverflow 上再问下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/514438

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX