【发布时间】:2009-09-24 21:56:05
【问题描述】:
获取长整数序列(比如 100,000 个整数)并返回序列随机程度的测量值的最佳算法是什么?
该函数应该返回一个结果,如果序列不是全部随机,则返回 0,如果完全随机,则返回 1。如果序列有点随机,它可以在中间给出一些东西,例如0.95 可能是一个合理的随机序列,而 0.50 可能有一些非随机部分和一些随机部分。
如果我将 Pi 的前 100,000 位数字传递给函数,它应该给出一个非常接近 1 的数字。如果我将序列 1、2、... 100,000 传递给它,它应该返回 0。
通过这种方式,我可以轻松获取 30 个数字序列,确定每个数字的随机性,并返回有关它们相对随机性的信息。
有这样的动物吗?
…..
2019 年 9 月 24 日更新:Google may have just ushered in an era of quantum supremacy 说:
“据报道,谷歌的量子计算机能够在 3 分 20 秒内解决一个计算——证明随机数生成器产生的数字的随机性——这将花费世界上最快的传统超级计算机 Summit 大约 10,000 年。这有效地意味着传统计算机无法进行计算,谷歌率先展示了量子霸权。”
显然有一种算法可以“证明”随机性。有谁知道它是什么?这个算法还能提供随机性的度量吗?
【问题讨论】:
-
我很惊讶地发现实际上有算法声称能够测试随机性。也许我对随机的定义与您所说的不同,但从逻辑的角度来看,这在数学上应该是不可能的。即使您传入 100K 个全为 4 的数字,它也是完全可行的,它是随机生成的。阅读一些文章,它们看起来更像是为了评估分布而不是实际随机性。
-
发现这篇文章 (en.wikipedia.org/wiki/Statistical_randomness) 解释了统计随机性和真实随机性之间的区别,这让我明白了。有趣...
-
@lkessler - 完全由单个数字(例如 100,000 个四位)组成的真正随机序列的几率与任何其他特定数字系列的几率相同。由于您只检查一个特定的序列,因此无法知道它是否是由真正的随机过程生成的。所以你就剩下统计随机性了。
-
@JohnFx 我认为他所说的“随机性度量”的意思是,“鉴于数列的历史,预测数列中的下一个数字是多么容易”。 0 表示下一个应该是什么数字很明显(如在一串 4 中),而 1 表示它完全不明显(即没有可识别的模式)。从这个意义上说,PI(或 sqrt(2))是非常随机的(尽管如果您知道公式或如何找到数字字符串,那么它是完全确定的)。