我有一些函数将英文字母的小写字母作为输入并返回True或False。
有2 ^ 26个这样的可能功能。下面是一些函数及其26位表示:
00000000000000000000000001(仅限z) 01010101010101010101010101(仅限字母) 10000000000000000000000000(仅限一个) 10001000100000100000100000(仅限元音) 10000001000000000000000100(仅限a,h,x)
我想要做的是为感知随机性评分这些功能,即他们对人类看起来多么武断?是否有模式,或者我只是随机选择一些字母?
我认为得分可能是基于量化向其他人描述模式所需的最小信息,或压缩时模式字符串的大小。
是否有适合此的算法?并且它可以包含人类可能事先知道的额外信息,例如" AEIOU"属于"元音"上课," gjpqy"属于"低挂" class," bdfhijklt"属于" tall"类?
答案 0 :(得分:1)
您只能使用一个样本来确定流程的随机性。这部xkcd漫画很好地说明了这一点:
事实上,我们的宇宙本身可能不可思议,但它只需要发生一次。
"感知随机性"是一个非常软弱的概念。你需要对人类和你的琴弦进行试验,看看他们认为是什么"随机"什么不是,然后尝试构建一个模型。
你可以使用游程编码和面向比特的LZ77类型的压缩来检测重复的字符串,但是你很难压缩只有26位长的字符串首先,无论你设计什么描述语言。特别是如果你试图包括诸如高度,元音等之类的东西。结果,Kolomogorov的复杂性将不是人类感知随机性的良好模型"。
答案 1 :(得分:1)
如前所述,26位是一个非常短的数据集,但一个合适的衡量标准是计算“运行长度”,例如:
01010101010101010101010101
:所有游程都是1 10000001000000000000000100
:跑步长度1出现三次,6次出现一次,15次出现,2次出现您可以通过模拟创建“典型”运行长度的直方图(或从某处查找它们)并将它们与这些直线图进行比较。
这些字符串可能值得“夸大”这些字符串(我使用更大的字母表,因此更清晰):ABCD
将成为ABCD-BCDA-CDAB-DABC
,不包括短划线。从这里你可以获得更多的统计数据和更少的边界效果。
编辑:对于长字符串,平均值n
的运行长度的概率应为O(2^-n)
,但通过模拟估算这些概率仍然是最容易的。