是否有任何软件可以在 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 中测试序列的非随机性?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以检测 iPhone 上的非 MFI 配件?

Java中的非阻塞异步IO

是否可以调用驻留在 exe 中的非导出函数?

numpy中的非重复随机数

是否可以在javascript中序列化任何类对象?

时间序列分析:趋势时间序列分析之随机时间趋势