コルモゴロフ複雑性定義の同等性


20

Kolmogorov-Complexityを定義するには多くの方法があり、通常、これらすべての定義は加法定数まで同等です。場合であることをK 1K1及びK 2は、K2コルモゴロフ複雑機能である(別の言語又はモデルを介して定義された)、その後一定存在Ccようにそのすべての文字列のためのXx| K 1x K 2x | < c|K1(x)K2(x)|<c。これは、すべてのコルモゴロフ複雑度関数KKおよびxごとにxK x | x | + c(定数 cの場合)K(x)|x|+cc

チューリングマシンに基づいたKの次の定義に興味がありますK

  1. 状態の数q状態のTMが空の文字列でxを出力するように、K 1x を最小数qとして定義します。K1(x)qqx
  2. プログラムの長さ:定義:K 2xは出力がその最短「プログラム」されるようにxは。つまり、TMをバイナリ文字列にエンコードする方法を修正します。マシンのMは、のようにコードの(バイナリ)を示すM K 2x = | M | ここで、最小値は、空の入力でxを出力するすべてのMのものです。K2(x)xMMK2(x)=min|M|Mx

あるK 1K 2と同等か?それらの間の関係は何ですか?また、コルモゴロフの複雑さの概念をよりよく把握しているのは、それらが同等でない場合です。K1K2

特に私を悩ませているのは、xでのK 2の増加率で、これは超線形ではないように思われます(または| x | + cではなく、K 2 < C | x |のような定数C > 1で少なくとも線形)。xを出力する最も単純なTMを考えてみましょう- 状態と遷移関数の一部としてxを単にエンコードするTMです。それは見てすぐにあるという K 1X | x | + 1K2xC>1K2<C|x||x|+cxxK1(x)|x|+1。しかし、同じマシンのエンコーディングははるかに大きく、私が得る自明な限界はK 2x | x | ログ| x | K2(x)|x|log|x|


n個の状態を持つ2 n 2台を超えるマシンがあり、それらの平均サイズは少なくともn 2であるため、これらが加算定数によってのみ異なることはほとんどありません。2n2nn2
カベ

1
There is a well known bound that K2(x)c+2|x|K2(x)c+2|x| for some fixed cc not depending on xx. This is because we can encode xx into a prefix-free language by just doubling each bit of xx and then ending with 0101. This takes 2|x|+22|x|+2 bits to represent xx. Thus, because K2K2 is defined in terms of a universal prefix-free machine, K2(x)2|x|+2+cK2(x)2|x|+2+c for some fixed cc. This can be improved some by using a more intelligent way to encode xx into a prefix free language.
Carl Mummert

I can't see how. It seems that either xx is given as part of the encoding (as raw data), or you must construct xx by your state-machine. The first option seems to be cheating and I don't see how it can be comparable to the second option (which implies K1K1)
Ran G.

@Ran G.: The key point is the invariance theorem described at en.wikipedia.org/wiki/Invariance_theorem . If I can describe any effective system that has a growth rate of 2|x|2|x| then a universal Turing machine (as you describe for K2K2) will meet this within an additive constant. The universal machine is the one that takes MM are input and returns the output of MM if MM halts.
Carl Mummert

回答:


6

I apologize in advance for that I give way too many details, but I'm about to contradict people.

About K(x)K(x)+cK(x)K(x)+c

The fact that K1(x)K2(x)+cK1(x)K2(x)+c usually comes from an interpreter of the description language #2 into the description language #1 and not from a translation from programs of #2 into programs of #1.

For example KC(x)KPython(x)+cpy2cKC(x)KPython(x)+cpy2c and you get this inequality as simply as this:

void py_run(char * s) {
    // code of your Python interpreter
}

int main(void) {
    py_run("Put here your Python program of size Kpython(x)");
}

Then your constant cpy2ccpy2c will be something like 528+490240688528+490240688 where 528528 is the number of bits for this code and 490240688490240688 bits is the size the official Python interpreter written in C. Of course you only need to interpret what is possible in your description language for Python so you can do better than 69 MB :-)

What is important is that you can write your Python program linearly in your C code. For example, a language where you need to put "BANANA" between every character is not a very good description program and the property is then false. (But if the description language authorizes you to write data in a separate file or in a block, this problem disappear)

Why your K1(x)=qK1(x)=q is flawed

The problem with your definition of K1K1 is that you may need more than qq bits to describe a Turing machine with qq states because you need to encode transitions.

So no K1K1 and K2K2 are probably not equivalent, but that's mainly K1K1's fault. I think that we can prove that for all a>0a>0 there is a caca such that K1(x)a|x|+caK1(x)a|x|+ca. Of course any a<1a<1 is enough to disprove the fact that K1K1 is not a valid function, since it would mean that we can encode more all 2n2n possible strings of length nn into an+caan+ca bits.

But the size is an incredibly tight bound when building Turing machines. The idea is that in a block of bb states there are b2bb2b ways to find transitions for each state and that's better than the usual 2b2b ways you can fill bb bits. Then you can store in each block log2blog2b bits of information. (not 2log2b2log2b because you have to go in and out the block one way or another)

So yeah... With blocks of size 21/a21/a you could probably prove K1(x)a|x|+caK1(x)a|x|+ca. But I already written way too much about why the number of states is not a valid Kolmogorov complexity function. If you want me to elaborate, I will.

Now about K2K2

The naive descriptive language corresponds roughly to K2(x)=q2(log2q+2)K2(x)=q2(log2q+2) (i.e. log2qlog2q for each next state and details about write and termination).

As you seem to be, I'm convinced that a better/cheater way would be to authorize to encode "data" into Turing machine, maybe by adding a binary tag in the description language that says whether if a state is a data state (that just writes a bit and go to the next state) or if it does something else. That way you could store one bit of your xx in one bit of your descriptive language.

However if you keep the same K2K2 you could use the same technique I used in the previous part to save a few bits, but I seem to be stuck at K2(x)a|x|log|x|+cK2(x)a|x|log|x|+c (for any a>0a>0) .. maybe less than log|x|log|x|, even, but obtaining O(|x|) seems hard. (And I expect it should be |x|, not even O(|x|).)


do you claim that K1 is not a kolmogorov-complexity function? This is very surprising to me, since K1 is actually the definition used in some intoduction to computability course I've once taken (not that it says anything about its correctness).
Ran G.

Well the fact that K1(x)12|x|+c is quite disturbing. Consider this: there are 2n possible words of n bits and you could encode them using a 12n+c bits? That would imply 2n=O(212n) (you encoding has to be injective)
jmad

What if the python program has characters reserved by C?
PyRulez
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.