我研究了有关Kolmogorov复杂性的内容,阅读了Vitanyi和Li的一些文章和书籍,并使用归一化压缩距离的概念来验证作者的脚步法(通过它们的相似性来确定每个作者如何写一些文本和组文档)。
在那种情况下,由于数据压缩器可以用作图灵机,因此使用数据压缩器来近似Kolmogorov复杂度。
除了数据压缩和编程语言(您将使用其中编写某种压缩器)之外,还可以使用其他什么方法来近似Kolmogorov复杂度?还有其他方法可以使用吗?
我研究了有关Kolmogorov复杂性的内容,阅读了Vitanyi和Li的一些文章和书籍,并使用归一化压缩距离的概念来验证作者的脚步法(通过它们的相似性来确定每个作者如何写一些文本和组文档)。
在那种情况下,由于数据压缩器可以用作图灵机,因此使用数据压缩器来近似Kolmogorov复杂度。
除了数据压缩和编程语言(您将使用其中编写某种压缩器)之外,还可以使用其他什么方法来近似Kolmogorov复杂度?还有其他方法可以使用吗?
Answers:
我想一个可能的回答你的问题是这样的:以一个伪随机数发生器 。尝试选择对它有强大攻击力的生成器:针对的随机数生成器攻击(出于我们的目的)是一种算法,当给定输入字符串时,算法确定种子,使得。然后近似的KC :G A s A (s )G (A (s ))= s s
input: s
Compute A(s);
if |A(s)| + |G| > |s| output: |s|
otherwise output: |A(s)| + |G|
凡是计算的程序的长度(对于线性生成器,通常很短)。G (s )
请注意,实际上,随机数生成器攻击并非如此:它们可能会失败或产生不完整的结果。在这种情况下,您可以调整算法,使其返回当攻击的结果不令人满意时。压缩算法也有同样的说法。
与压缩算法相反,此方法需要注意的是,压缩算法通常更适合于计算KC,因为它们被定制为可在任何字符串上使用,而仅当恰好在的映像中时,攻击才能起作用(可能性很小)。g ^
语法编码是压缩算法使用较少的版本,可以作为Kolmogorov复杂度的“粗略”估计。语法编码不像其他更常见的方法那样普遍用作压缩算法,这可能主要是因为它对基于文本的语料库的压缩(例如,来自Lempel-Ziv的压缩)没有太大的改进,但对其他类型的数据却表现良好。这个想法是使用语法规则“压缩”字符串。语法推导可能会导致DAG(相对于较不复杂的树),因此存在很大的表示复杂性。
另一个选择是找到代表一个字符串的最小/最小电路,但是众所周知这具有非常高的计算复杂度,并且只能在小的字符串上才能成功。
除了Lempel-Ziv“游程编码”类型的方法外,还有其他压缩算法方法,例如向量代数和SVD可以用作压缩算法。同样,傅里叶变换也经常用于压缩图像,例如JPG标准。