测量位序列复杂度的方法

Ways to measure bit sequence complexity

我正在寻找一种简单的方法来估计固定大小(最大长度可能为 10)的位序列的复杂性。例如,我认为 0000000 和 111111 根本不是很复杂,但 101010 和 101101 位于频谱的其他位置。

我知道 Kolmogorov 复杂度是无法计算的,但是否可以简单地用二进制字母表为固定(和小)长度的序列编程?或者是否有另一种可能只是近似测量但更容易计算的测量?

重要的是,该措施要相当简单,这样我才能向其他人(尽管受过良好教育)解释它。

谢谢。

你需要有一个计算复杂度的程序,没有最好的程序。

例如,您可以对字符串进行 运行 编码,然后计算 运行 的数量。

您可以 运行 通过 LZW 压缩器(如 ZIP)压缩字符串,并报告压缩后的大小。

您不必只选择一种方法。 您的方法可以是尝试五种不同的方法,并报告给您的测量值最小的一种。

例如,您可以先尝试每隔一位取反,然后再尝试 运行 编码。 或者尝试反转位 2 和 3,然后反转位 6 和 7,依此类推。

这些是获得度量值的可能方法,但仅此而已。

Kolmogorov 复杂度是可以重现字符串的最小程序的大小(以位为单位),这取决于语言(无论是高级语言、汇编语言、机器还是图灵机,或驱动程序的代码)您为此目的创建的特殊程序)。

你知道它存在是因为你知道有上限和下限。任何可以重现该字符串的程序都会为您提供一个上限。你知道空程序不能,所以你的下限为零。所以它介于两者之间,但这并不意味着您可以找到它。

请记住,仅仅谈论一个字符串的复杂性并没有多大意义,因为测量工具可以针对该字符串进行优化。 您确实需要谈论大量字符串,只是为了保持工具的诚实。