【发布时间】:2011-03-07 02:12:28
【问题描述】:
如何确定二进制字符串的统计随机性?
Ergo,我如何编写自己的测试代码,并返回一个与统计随机性相对应的单个值,一个介于 0 和 1.0 之间的值(0 表示非随机,1.0 表示随机)?
测试需要处理任何大小的二进制字符串。
当您使用笔和纸进行操作时,您可能会像这样探索字符串:
0(任意随机,唯一的选择是1)
00(不是随机的,它是重复的并且与大小匹配)
01(更好,两个不同的值)
010(较少随机,回文)
011(更少随机,更多 1,仍然可以接受)
0101(少随机,花样)
0100(更好,更少,但任何其他分布都会导致模式)
案例:
尺寸:1,可能性:2
0:1.0(随机)
1:1.0(随机)
尺寸:2,P:4
00: ?
01:1.0(随机)
10:1.0(随机)
11:?
S:3, P:8
000:?非随机
001:1.0(随机)
010:?不那么随机
011:1.0(随机)
100:1.0(随机)
101:?不那么随机
110 1.0(随机)
111:?非随机
等等。
我觉得这对于将字符串分解为所有可能的子字符串并比较频率可能起到了很大的作用,但似乎这种基础工作在计算机科学的早期就应该已经完成了。
【问题讨论】:
-
任何单个二进制字符串都可以被视为随机的!你需要有一个样本空间来比较它...
-
你到底想做什么?
-
就是这样:读取任意二进制字符串,并注意其统计随机性。例如,0101010101010101 具有平衡的 1 和 0 数量,但几乎不是随机的。可以这样说:[00000000 的随机性为 0] [01010101 的随机性为 0.01] [00000101 的随机性为 0.05] [01001011 的随机性为 1.0]
-
您提出的问题比您预期的要难。您是否有任何特定的随机性测试要实施?统计随机性的维基百科页面列出了一些更简单的测试。您可能不得不去期刊文章寻找更有趣的文章。你用这个测试做什么?这可能会影响哪些测试是相关的。你真正想测量什么?也许:观察到的字符串是从真正的随机生成器生成的概率?
-
哈!你的案例是一部非常好的喜剧。在随机字节串中,它们中的任何一个都会像另一个一样频繁出现!
标签: c++ algorithm entropy random