考虑以下输入:
1,1,2,3,5,8
- 它不是随机的
2,4,8,16,32
- 这两个
4,1,2,11,5,9
- 这个看起来像随机序列
我想问一下是否有这样的算法来证明输入是随机的还是不是?
答案 0 :(得分:5)
不,没有这样的证明 - 如果你有完全随机的数字,每个长度为n的序列的概率是相等的。 但是,有一些统计测试可以评估随机数生成器的质量,这可能是您正在寻找的。请参阅Diehard tests。
答案 1 :(得分:1)
正如其他人所提到的,你不能证明序列是随机生成的。除了@timos suggested之外,您可能还有其他一些要求。似乎你希望确保序列不是来自一些众所周知的“非随机”序列的假设列表。如果是这种情况,您可能有兴趣了解On-Line Encyclopedia of Integer Sequences。
如果您有特定的序列,可以根据他们的数据库进行检查。例如,1,1,2,3,5,8
出现在许多序列中,但最突出的是A000045(斐波纳契数)。类似4,1,2,11,5,9
的序列不会出现在搜索中。
这些都没有证明什么,但也许这更符合你在这种情况下的目标。
答案 2 :(得分:0)
我想在这里强调,“随机”一词不仅意味着分布均匀,而且还独立于其他所有事物(包括独立于任何其他选择)。
有许多可用的“随机性检验”,包括通过运行各种统计探针估算 p值的检验,以及估算最小熵的检验。大约是比特序列的最小“可压缩性”级别,并且是“安全随机数生成器”最相关的熵度量。还有各种各样的“ randomness extractors”,例如冯·诺伊曼(von Neumann)和佩雷斯(Peres)提取器,它们可以使您了解可以从位序列中提取多少“随机性”。但是,所有这些测试和方法只能在此随机性定义的第一部分(“均匀分布”)上比第二部分(“独立”)更可靠。
通常,没有一种算法可以仅凭一个数字序列来判断该过程是否以独立且均匀分布的方式生成了它们,而又不知道该过程是什么。因此,例如,尽管您可以确定给定的位序列的零个比零大,或者其中没有明显的模式,但是您无法确定这些位是否为
...没有有关该过程的更多信息。作为一个重要的例子,在这种意义上,人们选择密码的过程很少是“随机的”,因为除其他原因外,密码往往包含熟悉的单词或名称。