一种良好而简单的随机性度量

时间:2009-09-24 21:56:06

标签: algorithm random

采用长整数序列(例如100,000个整数)的最佳算法是什么,并返回序列随机性的测量值?

该函数应返回单个结果,如果序列不是全部随机,则为0,如果完全随机则为1。如果序列有些随机,例如,它可以给出介于两者之间的东西。 0.95可能是一个合理的随机序列,而0.50可能有一些非随机部分和一些随机部分。

如果我将Pi的前100,000个数字传递给函数,它应该给出一个非常接近1的数字。如果我将序列1,2,... 100,000传递给它,它应该返回0. / p>

通过这种方式,我可以轻松获取30个数字序列,识别每个数字的随机性,并返回有关其相对随机性的信息。

有这样的动物吗?

13 个答案:

答案 0 :(得分:18)

你的问题回答了自己。 “如果我要将Pi的前100,000个数字传递给函数,它应该给出一个非常接近1”的数字,除了Pi的数字不是随机数,所以如果你的算法不能识别非常特定的序列为非随机然后它不是很好。

这里的问题是有很多类型的非随机性: - 例如。 “121,351,991,7898651,12398469018461”或“33,27,99,3000,63,231”或甚至“14297141600464,14344872783104,819534228736,3490442496”绝对不是随机的。

我认为您需要做的是确定对您来说很重要的随机性方面 - 分布,数字分布,缺乏共同因素,预期素数,斐波纳契和其他“特殊”数等等。

PS。快速和肮脏(并且非常有效)的随机性测试是,在您将其压缩后,文件的大小大致相同。

答案 1 :(得分:13)

可以这样做:

CAcert Research Lab做a Random Number Generator Analysis

Their results page使用7个测试(熵,生日间隔,矩阵等级,6x8矩阵等级,最小距离,随机球体和挤压)评估每个随机序列。然后将每个测试结果颜色编码为“无问题”,“潜在确定性”和“非随机”之一。

因此可以编写一个接受随机序列并执行7次测试的函数。 如果7个测试中的任何一个是“非随机”,则该函数返回0.如果所有7个测试都是“没有问题”,那么它返回1.否则,它可以根据有多少返回一些数字测试是“潜在的确定性”。

此解决方案中唯一缺少的是7次测试的代码。

答案 2 :(得分:8)

你可以尝试拉链压缩序列。成功越好,序列随机性越小。

因此,启发式随机性=邮政编码的长度/原始序列的长度

答案 3 :(得分:7)

正如其他人所指出的那样,你不能直接计算一个序列的随机性,但你可以使用几个统计测试来提高你的置信度一个序列是否是随机的

DIEHARD suite是此类测试的事实标准,但它既不返回单个值也不简单。

ENT - A Pseudorandom Number Sequence Test Program,是一个更简单的替代方案,结合了5种不同的测试。该网站解释了每项测试的工作原理。

如果您确实只需要一个值,您可以选择5个ENT测试之一并使用它。 Chi-Squared test可能是最好用的,但这可能不符合简单的定义。

请记住,单个测试不如在同一序列上运行多个不同的测试。根据您选择的测试,它应该足以将明显可疑序列标记为非随机序列,但对于表面上看似随机但实际上表现出某种模式的序列可能不会失败。

答案 4 :(得分:5)

您可以将100.000输出视为随机变量的可能结果并计算其相关熵。它会给你一定程度的不确定性。 (以下图片来自维基百科,您可以在那里找到有关Entropy的更多信息。)简单地说:

Entropy formula

您只需计算序列中每个数字的频率。这将给你p(xi)(例如,如果10出现27次p(10)= 27 / L,其中L对于你的情况是10.000。)这应该给你熵的量度。

虽然它不会给你0到1之间的数字。仍然0将是最小的不确定性。但是上限不会是1.您需要对输出进行标准化以实现该目的。

答案 5 :(得分:3)

你寻求的东西不存在,至少不是你现在如何描述它。

基本问题是:
如果它是随机的,那么它将通过随机性测试;但反过来却没有 - 没有可以验证随机性的测试。

例如,人们可能在远离的元素之间具有非常强的相关性,并且通常必须为此明确地测试。或者可以有一个平坦的分布,但是以非随机的方式生成。等等。

最后,你需要决定随机性的哪些方面对你很重要,并测试这些(正如James Anderson在他的回答中所描述的那样)。我敢肯定,如果你想到任何不明显的测试方法,这里的人都会有所帮助。

顺便说一下,我通常从另一方面解决这个问题:我给出了一些数据集,这些数据可以查找我看到的完全随机的数据,但我需要确定某个地方是否存在模式。一般来说非常不明显。

答案 6 :(得分:3)

“这个序列有多随机?”这是一个棘手的问题,因为从根本上说,您对序列的生成方式感兴趣。正如其他人所说,完全有可能生成看似随机的序列,但不是来自我们认为是随机的来源(例如pi的数字)。

大多数随机性测试试图回答一个稍微不同的问题,即:“这个序列对于给定的模型是否异常?”。如果你的模型是滚动十面骰子,那么很容易量化从该模型生成序列的可能性,并且pi的数字看起来不会异常。但是如果你的模型是“可以从算法中轻松生成这个序列吗?”它变得更加困难。

答案 7 :(得分:2)

在计算机视觉中分析纹理时,会出现尝试测量纹理随机性的问题,以便对其进行分割。这与您的问题完全相同,因为您正在尝试确定一系列字节/整数/浮点数的随机性。我能找到的关于图像熵的最佳讨论是http://www.physicsforums.com/showthread.php?t=274518

基本上,它是一系列值的随机性统计度量。

我也会尝试将序列与自身进行自相关。在自相关结果中,如果没有第一个值以外的峰值,则意味着输入没有周期性。

答案 8 :(得分:1)

@JohnFx “......数学上不可能。”

海报陈述:采用一长串整数......

因此,就像在微积分中使用极限一样,我们可以将价值视为价值 - 对混沌的研究表明,我们有限的限制可能“转向自身”产生张量场,提供绝对的幻觉。只要有时间和精力,它就可以运行。由于时空的曲率,没有完美 - 因此op的“ ...如果完全随机,则说1。”是用词不当。

{注明:已经提供了充分的观察结果 - 让我失望}

根据你的位置,给出几个k的两个字节[],每个独立随机化 - op无法获得“测量序列的随机性”.Wiki上的文章是提供信息的,并且明确地大步前进问题,但

与经典物理学相比,量子物理学预测量子力学系统的性质取决于测量环境,即是否进行其他系统测量。

  

来自因斯布鲁克的物理学家团队,   奥地利,由克里斯蒂安罗斯和   雷纳布拉特,这是第一次   在综合实验中证明   这是不可能解释的   非语境中的量子现象   术语

资料来源:“科学日报”

让我们考虑非随机蜥蜴运动。在原始的,经过纠正的超级论文之下,引发豹纹壁虎棚尾复杂运动的刺激源永远无法得知。我们,经验丰富的计算机科学家,遭受新手们所提出的无辜挑战,他们非常了解在未受污染和原始思维的背景下,他们是前馈思想的宝石和萌芽者。

如果原始蜥蜴的思想领域产生张量场(处理它们,这是次线性物理学的前沿研究)那么我们就可以得到“最好的算法来获取长序列”通过混乱倒置从鸟羽事件到现在的文明“。考虑这样一个问题,即由蜥蜴产生的这种思想领域是独立的,是一种怪异的还是可知的。

  “直接观察哈代悖论   通过联合弱测量与   纠缠光子对,“由...撰写   Kazuhiro Yokota,Takashi Yamamoto,   Masato Koashi和Nobuyuki Imoto来自   工学研究生院   大阪大学的科学与实践   CREST光子量子信息   川口市的项目

资料来源:“科学日报”

(考虑到幽灵/可知的二分法)

我从自己的实验中得知直接观察削弱了可感知张量的绝对性,仅使用单焦点技术就不可能区分思想和可感知的张量,因为可感知的张量不是原始的思想。量子的一个基本结果是,只有可感知张量的弱状态才能可靠地彼此区分,而不会导致崩溃成为统一的可感知张量。尝试一下 - 使用纯粹的思想来研究一些期望的可能性。因为一个想法没有时间或空间,所以它是有限的。 (非限定的)因此可以达到“完美” - 即绝对性。只是为了提示,从天气开始,因为这是最容易影响的事情(至少就目前所知),然后尽快进行从睡眠状态到清醒状态的连接。几乎不会中断顺序链接。

当身体醒来时,几乎不可避免的昙花一现,但就像门铃响起一样,这说明了一个有趣的统计研究领域,资金可用性:一个人可以同步保持多少个想法?我发现二元性是实际的工作极限,在三位一体中,它要么在下一个思想中突破,要么不会持续很长时间。

也许Yokota等人的工作可以揭示虚假网络流量的来源......也许是鬼魂。

答案 9 :(得分:0)

根据Knuth,请确保测试低阶位的随机性,因为许多算法在最低位中表现出可怕的随机性。

答案 10 :(得分:0)

尽管这个问题很旧,但似乎并没有“解决”,所以这是我的2美分,表明这仍然是一个重要的问题,可以用简单的术语来讨论。

考虑密码安全性。

问题是关于“长”数字序列,例如“ 100.000”,但没有说明“长”的标准。对于密码,可能会将8个字符视为长字符。如果这8个字符是“随机的”,则可能被认为是一个很好的密码,但是如果可以轻易猜到的话,这将是一个无用的密码。

公用密码规则是混合使用大写字母,数字和特殊字符。但是常用的“ Password1”仍然是错误的密码。 (好的,用9个字符组成的示例,对不起)因此,您还应用了其他答案的多少种方法,还应该检查密码是否出现在多个词典中,包括泄漏的密码集。

但是即使如此,也可以想象一下好莱坞新星的崛起。这可能会导致为新生儿赋予一个新的著名名称,并且可能会作为密码而流行,而词典中还没有。

如果我被正确告知,则几乎不可能自动验证用户选择的密码是随机的,并且不是通过易于猜测的算法得出的。而且,一个好的密码系统应该可以使用计算机生成的随机密码。

结论是,没有方法可以验证8个字符的密码是否是随机的,更不用说一种简便的方法了。如果无法验证8个字符,为什么验证100.000个数字会更容易?

密码示例只是该随机性问题的重要性的一个示例;还考虑加密。随机性是安全的圣杯。

答案 11 :(得分:0)

我想在这里强调,“随机”一词不仅意味着均匀分布,而且还独立于其他所有事物(包括独立于任何其他选择)。

有许多可用的“随机性检验”,包括通过运行各种统计探针估算 p值的检验,以及估算最小熵的检验。大约是比特序列的最小“可压缩性”级别,并且是“安全随机数生成器”最相关的熵度量。还有各种各样的“ randomness extractors”,例如冯·诺伊曼(von Neumann)和佩雷斯(Peres)提取器,它们可以使您了解可以从位序列中提取多少“随机性”。但是,所有这些测试和方法只能在此随机性定义的第一部分(“均匀分布”)上比第二部分(“独立”)更可靠。

通常,没有一种算法可以仅凭一个数字序列来判断该过程是否以独立且均匀分布的方式生成了它们,而又不知道该过程是什么。因此,例如,尽管您可以确定给定的位序列的零个数多于零,但是您不能确定这些位是否为零。

  • 真正独立于任何其他选择而生成,或者
  • 形成一个非常长的周期序列的一部分,该序列仅是“局部随机”,或者
  • 只是简单地从另一个过程中重复使用,或者
  • 是以其他方式生产的

...没有有关该过程的更多信息。作为一个重要的例子,在这种意义上,人们选择密码的过程很少是“随机的”,因为除其他原因外,密码往往包含熟悉的单词或名称。

我还要讨论在2019年添加到您的问题中的文章。该文章涉及以较低的错误率对伪随机量子电路进行采样的任务(该任务专门为量子计算机设计,比传统计算机更容易实现指数增长) ,而不是按照此答案给出的意义“验证”是否(随机地)生成了特定的位序列(从上下文中取出)。对于July 2020 paper中的“任务”到底有什么解释。

答案 12 :(得分:-2)

测量随机性?为此,您应该充分理解其含义。问题是,如果您在互联网上搜索,您将得出结论,即没有统一的随机性概念。对于某些人而言,这是一回事,对于其他人而言,则是另一回事。随机性和不确定性是两件事。最常见的误导性概念之一是测试“它是随机的还是非随机的”。随机性不是一个绝对的概念,它是一个相对的概念。不是“是”或“否”。因此,您无法确定某些事物是随机的还是非随机的。可以确定的实际上是“随机性”或“随机性”的程度。说某种事物绝对是随机的还是非随机的,是错误的,因为它是相对的,甚至是主观的。同样,说某事遵循某种模式是不是主观的且相对的,因为什么是模式?为了测量随机性,您必须首先了解它是数学理论的前提。随机性的前提很容易理解和接受。如果所有可能的结果都具有完全相同的发生概率,那么将最大程度地实现随机性。就这么简单。更加难以理解的是将此概念/前提与事件的某个顺序或结果的分布相关联,以确定随机程度。您可以将样本分为多个集合或子集合,并且它们可以证明是相对随机的。问题是,即使它们本身被证明是随机的,也可以证明如果将它们作为一个整体进行分析,样本就不会那么随机。因此,为了分析随机度,您应该将样本视为一个整体,而不是细分。这里没有7个测试或5个测试,只有一个。该测试遵循已经提到的前提,从而根据结果分布类型或换句话说,根据给定样本的结果频率分布类型确定随机程度。样品的具体顺序无关紧要。如果考虑变量n(可能的结果)和t(试验/事件的数量或集合中元素的数量)的变量,您将拥有(n ^ t)或(n等于t的幂)的总数。如果我们认为前提是正确的,那么任何这些可能的序列都具有完全相同的发生概率。由于所有可能的序列都具有完全相同的发生概率,因此任何特定的序列都是不确定的,以便计算样本的“随机性”。至关重要的是计算事件样本的结果分布类型的概率。为此,我们必须计算与样本的结果分布类型相关的所有序列。因此,如果您考虑s =(导致我们结果分配类型的所有可能序列),那么s /(n ^ t)将为您提供0到1之间的值,这应解释为特定样本的随机性度量。 1为100%随机,0为0%随机。应该说您永远不会得到1或0,因为即使您的样本与MOST可能的随机结果分布类型一致,也永远不会被证明是100%。而且,如果您的样本与可能的最小随机结果分布类型重合,则永远无法证明其为0%。发生这种情况的原因是,由于存在多种结果分布类型,因此没有一种可以代表100%或0%。为了确定变量的值,应在多项式分布概率后使用相同的逻辑。这适用于任何数量的可能结果以及任何长度的序列/试验/事件。当然,如果您的样本或序列很大,则需要进行大量的计算。