是否有任何软件可以在 Java 中测试序列的非随机性?
Posted
技术标签:
【中文标题】是否有任何软件可以在 Java 中测试序列的非随机性?【英文标题】:Is there any software for testing sequences for non-randomness in Java? 【发布时间】:2011-06-18 08:19:49 【问题描述】:我正在寻找能够查找字节序列的非随机属性的 Java 程序或库。当给定一个巨大的文件时,如果数据显示任何规律,则运行一些统计测试和报告。
我知道三个这样的程序,但不是在 Java 中。我尝试了所有这些,但它们似乎对我不起作用(这很令人惊讶,因为其中一个是 NIST 的)。其中最老的 diehard 运行良好,但使用起来有点困难。
【问题讨论】:
您特别希望运行什么测试? 为什么你需要知道这个?您是否尝试查看文件是否可以进一步压缩?这是一个很好的问题,我只是好奇。 :D cstheory.stackexchange.com/questions/569/… 其实,我能得到的。我想测试和调整 PRNG,所以任何可观察到的模式都是不好的。调优是我想将其集成到程序中的原因。这既不是家庭作业,也不是严肃的工作,只是我感兴趣的事情。 @maaartinus:问题在于“尝试制作新的 PRNG 时”这句话:这是专家领域。现有的具有众所周知的特征的有什么问题?创建自己的 PRNG 就像创建自己的加密方案一样;它几乎肯定会有缺陷。 【参考方案1】:正如一些评论者所说,这确实是一个专业的数学问题。我能为你找到的最简单的解释是:
Run Tests for Non-randomness
Autocorrelation
这很有趣,但由于它使用“正面或反面”来简化示例,您会发现您需要更深入地将相同的理论应用于加密/密码学等 - 但这是一个好的开始。
【讨论】:
在本页提到的那些中,自相关可能是最容易实现的。 @biziclop:谢谢,我已经为我的答案添加了直接链接。【参考方案2】:另一种方法是使用Fuzzy logic。您可以从数据集中提取模糊关联规则。这些规则基本上是以下形式的含义:
如果 A 则 B,例如解释为“如果 01101(存在)则 1111(将跟随)”
谷歌搜索“模糊数据挖掘”/“提取模糊关联规则”应该会给您带来足够多的结果。
实际上,您的问题领域非常庞大,因为这就是数据/文本挖掘的全部内容。以及统计和组合分析,仅举几例。
关于执行此操作的程序 - 请查看 this。
【讨论】:
【参考方案3】:与其说是对您的问题的回答,不如说是对您"any observable pattern is bad"
的评论。这让我想到随机性不是问题,而是可观察的模式,要解决这个问题,你肯定需要观察者。因此,简而言之,只需建立一个网站并众包即可。
将此技术应用于颜色命名的一些示例:http://blog.xkcd.com/2010/05/03/color-survey-results/ 和 http://www.hpl.hp.com/personal/Nathan_Moroney/color-name-hpl.html
【讨论】:
以上是关于是否有任何软件可以在 Java 中测试序列的非随机性?的主要内容,如果未能解决你的问题,请参考以下文章