【问题标题】:Algorithm to score 'perceived randomness' of different functions对不同函数的“感知随机性”进行评分的算法
【发布时间】:2015-09-16 11:49:05
【问题描述】:

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

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

00000000000000000000000001(仅限z) 01010101010101010101010101(仅偶数字母) 10000000000000000000000000(仅一个) 10001000100000100000100000(仅元音) 10000001000000000000000100(仅限 a、h、x)

我想做的是对这些函数的感知随机性进行评分,即它们在人类看来有多随意?好像有规律,还是我随便挑了几个字母?

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

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

【问题讨论】:

  • 如果你有时间研究细节,你可以学习 Kolmogorov Complexity:en.wikipedia.org/wiki/Kolmogorov_complexity
  • 量化感知随机性非常困难。您可能对The perception of randomness 感兴趣。搜索“感知随机性”会返回很多有趣的结果。在尝试为序列分配“感知随机性”值之前,您可能想了解人们实际感知随机性的方式。
  • 我认为这实际上更像是一个心理学问题而不是编程问题。如果人们看到的是字母而不是二进制,那么它也涉及语言学。我只能设想通过对大量人进行尝试来获得结果;描述模式有多难,这确实是一个很好的测试。

标签: algorithm compression information-theory


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    • 01010101010101010101010101:所有运行长度都是 1
    • 10000001000000000000000100:运行长度1出现3次,6出现1次,15出现1次,2出现1次

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

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


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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-24
    • 2020-05-30
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-12
    相关资源
    最近更新 更多