Kolmogorov Complexity:文字列自体よりも多くのバイトが必要なのはなぜですか?


13

コルモゴロフの複雑さに関するウィキペディアのエントリを読んでいた(この質問のおかげで)。

文字列のコルモゴロフの複雑さは、文字列自体の長さよりも数バイト大きくなることはできないことを示すことができます。

なぜあなたはそれを記述するために文字列自体以外のものを必要とするでしょうか?

回答:


13

コルモゴロフの複雑さの正確な値は、文字列を表すために選択した言語によって異なります。この言語はチューリング完全でなければならないので、すべての文字列をそれ自体として表すことはオプションではありません。

最大で長さの少なくとも1つの文字列がある場合は鳩の巣原理により、の表現そのものよりも短くなっているが、その後、最大で長さの少なくとも1つの文字列もありnは表現自体よりも長いですが。(表現は圧縮アルゴリズムです。)nn

各文字列の表現がそれ自体よりも最大で1ビット長い記述言語を使用できます。各表現は、「文字通りに印刷」または「解釈」のいずれかを示すビットで開始します。ただし、すべての記述言語がそれほど単純ではありません。

CC


6

ここで考慮される文字列の説明は、汎用のチューリングマシンへの入力です。Cプログラムと考えることができます。文字列hello worldは、それ自体ではCプログラムを形成しませんが、次のものはCプログラムを形成しますint main(int argc, char *argv[]) { printf("hello world"); }。ご覧のとおり、オーバーヘッドは一定ですがゼロではありません。


3
追加の微妙な点として、C(または理想的なチューリング完全C)では、文字列リテラルの一部の文字を引用符で囲む必要があるため、O(1)スペースオーバーヘッドで任意の文字列を印刷することはできません。
ジル「SO-悪であるのをやめる」
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.