2

我有一些函数将英文字母的小写字母作为输入并返回 True 或 False。

有 2^26 个这样的可能函数。以下是一些函数及其 26 位表示:

00000000000000000000000000000011(仅Z)010101010101010101010101011(甚至是字母)10000000000000000000000000000000000 000(仅)10001000100000100000100000(仅元音)

我想做的是对这些函数的感知随机性进行评分,即它们对人类来说有多随意?似乎有一个模式,或者我只是随机挑选了一些字母?

我认为分数可能基于量化向其他人描述模式所需的最少信息,或者压缩时模式字符串的大小。

有没有适合这个的算法?它是否可以包含人类可能预先知道的额外信息,例如“aeiou”属于“元音”类,“gjpqy”属于“low-hanging”类,“bdfhijklt”属于“tall”类?

4

2 回答 2

1

如前所述,26 位是一个非常短的数据集,但一种合适的测量方法是计算“运行长度”,例如:

  • 01010101010101010101010101:所有运行长度均为 1
  • 10000001000000000000000100: 运行长度 1 出现 3 次,6 出现一次,15 出现一次,2 出现一次

您可以通过模拟(或从某处查找)创建“典型”运行长度的直方图,并将其与这些进行比较。

通过像这样附加它们的所有旋转来“膨胀”这些字符串可能是值得的(我使用的是更大的字母,所以这更清楚):ABCD将变为ABCD-BCDA-CDAB-DABC,不包括破折号。当字符串结束时,您可以从中获得更多的统计数据和更少的边界效应。


编辑:平均而言,长字符串的运行长度的概率n应该是O(2^-n),但通过模拟来估计这些仍然是最容易的。

于 2015-10-06T15:07:27.530 回答
1

您无法仅使用一个样本来确定过程的随机性。这部 xkcd 漫画很好地说明了这一点:

4是随机的

事实上,我们的宇宙本身可能不太可能发生,但它只需要发生一次。

“感知随机性”是一个非常模糊的概念。你需要对人类和你的弦进行试验,看看他们认为什么是“随机的”,什么不是,然后尝试构建一个模型。

您可以使用运行长度编码和面向位的 LZ77 类型的压缩来检测重复的字符串,但是无论使用哪种描述语言,您都很难压缩开始时只有 26 位长的字符串你设计。特别是如果您尝试包括身高、元音等内容。因此,Kolomogorov 复杂性将不是人类“感知随机性”的良好模型。

于 2015-09-16T16:43:41.193 回答