它在几个关于算法复杂性的文本中,至少在无限序列中,可以更好地理解随机性的算法复杂性。在NIES的计算和随机性中,原因由定理2.2.1和2.2.2给出p。 83.我将专注于前者,这使得一些普通(不是前缀)机器有一个常量 $ c $ ,使每个自然数量 $ d $ 和string $ w $ 长度 $ \ GEQ 2 ^ {d + 1} + d $ ,有一个前缀 $ x $ $ w $ 使得普通复杂性 $ c(x)\ leq | x | -d + c $ 。 (这里 $ | x | $ $ x $ 。)

是,如果在接受任意字符串作为输入的定义机器方面定义复杂性,任何足够长的串,无论多么复杂,都可以具有初始子串,在复杂性中的复杂性或多或少是任意的“DIPS”。定理证明使用了一台使用输入字符串长度来构造其输出的机器。这显然是一个重要的点(见下文)。

我的问题:为什么不能为前缀的机器做到这一点?为什么不前缀复杂性也允许初始子串的复杂性倾斜?我尚未找到对这一点的解释,我在Nies,Downey和Hirschfeldt(见下文),李和特里尼(虽然它可能在某处),或者山脉(可计算和随机性)。我认为nies和d&h只是认为这很明显,但我不明白为什么。

一些前缀机:Downey和Hirschfeldt的算法随机性和复杂性,p。 122,指在书中先前证明的类似定期性,并备注可以认为可以被认为是读取输入的前缀机,直到它完成,而不会在磁带上的相反方向上移动,而没有任何测试终止输入字符或模式。该文本说“这突出了突出的前缀机如何避免使用字符串的长度来获得比字符串位中的更多信息。”我想如果有一个磁带,那么只有一个读数并且只在一个方向上移动,那么就无法保持计数器来测量任意长度;一个需要将柜员存储在磁带上的柜台,或者至少覆盖磁带上的某些东西,因为读取它。但为什么要这样做的前缀机就是这样的? Li和Vitanyi的介绍了Kolmogorov复杂性及其应用,第3 Ed,Sect。 3.1,例3.1.1,p。 201介绍了一个有三个磁带的前缀机。有一个只有royey和hirschfeldt的单向磁带,以及单向写入输出磁带。第三个磁带是双向读写工作磁带。无法使用工作磁带来计算输入的长度?在这种情况下,为什么可以在免费机器和普通图灵机之间存在区别?然而在第3章(PP 197FF)的开始时,李和特拉里尼还将前缀的机器视为避免与NIES定理2.2.1所隐含的人相关的后果。


对于那些发现它有用的人,nies'定理2.2.1如下。 (我决定几乎逐字重现它,而不是使用我自己的表示法,以避免意外地引入失真。)证明作品,通过表示有一个普通机器可以使用(编码)输入字符串的长度作为一部分输出字符串。这允许机器使用相对短的输入生成相对长的串 - 因为机器使用输入的内容及其长度作为构造输出串。正如我所看到的那样,这一切都需要这个技巧的工作是我们允许计算机计算输入字符串的长度。由于在我看来,可以像普通机器一样轻松地计算一个前缀的机器(带某种工作磁带区域)可以轻松地计算输入的长度,我看不出为什么这个定理不持有免费复杂性也是如此。

命题。有一个常量 $ c $ ,具有以下属性。对于每个 $ d \ in \ mathbb {n} $ 和每个字符串 $ w $ 长度至少 $ 2 ^ {d + 1} + d $ 有一个 $ x \ preceq w $ 这样<跨越类=“math-container”> $ c(x)\ leq | x | -d + c $ 。

证明。 [lelided:参考早期的表示法def。]机器 $ n $

ner“> $ n(\ sigma)=mathsf {string}(| \ sigma |)\ sigma $ 。它是 足以获取前缀 $ x $ $ w $ 使用 $ n $ -description length $ | x | -d $ 。让 $ k=mathsf {number}(w \!\ \ upharpoonright_d)$ (所以 其中 $ k \ leq 2 ^ {d + 1} $ ),让 $ x= w \!\ upharpoonright_ { d + k} $ $ w $ 的前缀,其中 $ d + k $ 其中 $ k $ 是 由第一个 $ d $ 比特的数字表示 $ w $ 。让 $ \ sigma $ 是 长度 $ k $ 这样 $ x= x \!\ upharpoonright_d \ sigma $ ,然后 $ n(\ sigma)= x $ 。因此 $ c_n(x)\ leq | x | -d $
(NIES 2009,第83页)

表示法: $ c $ :普通复杂性。 $ | x | $ :位字符串长度 $ x $ $ x \ preceq w $ $ x $ $ w $ $ \ mathsf {string}(n)$ :自然数字的编码 $ n $ 作为一个位字符串。 $ \ mathsf {node}()$ :逆 $ \ mathsf {string}()$ 。 (声明 $ k \ leq 2 ^ {d + 1} $ $ \ mathsf {node的定义$ 。) $ \ mathsf {string}(| \ sigma |)\ sigma $ $ \ mathsf {string}(| \ sigma |)$ $ \ sigma $ $ w \!\ \ \ \ \ \ \ \ span>: $ w $ 由其第一个 $ d $ 位。 (我很确定,这是<跨越类=“math-container”> $ \ upharpoonright $ 手段,但PP上的定义是我的定义,对我来说只有95%。我对<跨度的解释class=“math-container”> $ \ upharpoonright $ 在这个证明中是有道理的,我看不出任何其他解释如何鉴于它使用它是如何使用的。)

注意:“由 $ d + k $ 其中 $ k $ ”中间句子证据是“由 $ d + m $ 其中 $ m $ m $ ”。我相信“ $ m $ ”是一个错字。 ( $ m $ 在此页面上无处可见,也不在此页面附近。)

有帮助吗?

解决方案

回答名称问题,命题的证明违背了前缀编码,因为 $ \ sigma $ 不一定属于免费的前缀代码。

还有其他方法看到前缀程序比普通程序更良好。假设我们想要连接两个程序的输出 $ p,q $ 。使用前缀程序,我们可以采用一个通用程序,运行两个输入程序并连接其输出,总长度 $ | p | + | Q | + O(1)$ 。通过普通程序,这是不可能的,因为我们需要将两个程序分开 $ p,q $ 以某种方式,例如通过将它们编码为 $ \ mathit {len}(p)pq $ ,其中 $ \ mathit {len}(p)使用自终止编码$ 编码。因此,我们必须丢失<跨度类=“math-container”> $ o(\ log \ min(| p |,| q |))$

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top