随机数分析

时间:2010-10-26 20:34:56

标签: r matlab cryptography

给定一系列随机生成的数据,我怎样才能弄清楚它实际上是多么随机? R-lang是这个matlab的好工具吗?这些工具可以回答有关随机生成的数据的其他问题吗?还有其他更好的工具吗?

6 个答案:

答案 0 :(得分:10)

罗伯特·G·布朗的DieHarder test battery - 由Marsaglia等人重新实现和延伸旧的DIEHARD - 已被包裹在你可以开始的R包RDieHarder中。

请注意,RDieHarder版本需要特定的匹配DieHarder版本 - 我们还没有最新版本的版本。

编辑此外,对于加密测试的子集,NIST套件(包含在DieHarder中)应该是合适的,因为它是为它设计的。

答案 1 :(得分:5)

首先,您需要确定您正在测试的随机性。您是否考虑过在某个范围内的均匀分布?这通常是人们想到的,尽管你可能有一些其他的随机性,如正态分布。

一旦您有候选人分发,您可以测试该分布的适合度。 Kolmogorov-Smirnov检验是一项很好的通用检验。我相信它在R中被称为ks.test但是我也相信它假定了不同的值,所以如果你从这么小的值中取样,那么相同的值会出现不止一次,这可能是一个问题。

S上。 Lott在评论中提到了Knuth的Seminumerical Algorithms。这本书很好地介绍了卡方检验和Kolmogorov-Smirnov检验的拟合度。

如果你确实怀疑你有统一的随机值,Dirk Eddelbuettel提到的DIEHARD测试就是标准测试。

答案 2 :(得分:4)

根据维基百科(Randomness):

  

中心思想是一串   当且仅当它是时,位是随机的   比任何计算机程序都短   可以产生那个字符串(Kolmogorov   随机性) - 这意味着随机   字符串是那些不可能的字符串   压缩。

因此,给定随机数字流,将其保存到文件中,然后使用您喜欢的工具(zip,rar,...)进行压缩。压缩率可以解释为随机性的度量......更好的是,我会用它作为相对分数来比较两个数据序列的随机性。

答案 3 :(得分:3)

我建议阅读Chapter 10Beautiful Testing:测试随机数生成器。它比关于该主题的大多数文本更平易近人。也许,如果我们很好,那一章的作者约翰库克可能会停下来并给出他的意见。

答案 4 :(得分:1)

总是有toolbox

答案 5 :(得分:1)

理论上,Knuth上面提到的参考文献很有用,并且为了联系Amro的回应,Li& Co. Vitanyi与此有关。 link text