
アルゴリズム情報理論(コンピュータ科学と数学のサブ分野)では、テキストなどのオブジェクトのコルモゴロフ複雑度は、そのオブジェクトを出力として生成する最短のコンピュータプログラム(あらかじめ定められたプログラミング言語)の長さです。これは、オブジェクトを指定するために必要な計算リソースの尺度であり、アルゴリズム複雑度、ソロモノフ・コルモゴロフ・チャイティン複雑度、プログラムサイズ複雑度、記述的複雑度、またはアルゴリズムエントロピーとしても知られています。これは、 1963年にこの主題について初めて発表したアンドレイ・コルモゴロフにちなんで名付けられており[ 1 ] [注1 ]、古典的な情報理論の一般化です。
コルモゴロフ複雑性の概念は、カントールの対角線論法、ゲーデルの不完全性定理、チューリングの停止問題に類似した不可能性の結果を述べ、証明するために使用できます。特に、各テキストのコルモゴロフ複雑性の下限を計算するプログラムPは、 P自身の長さよりも本質的に大きい値を返すことはできません (セクション § チャイティンの不完全性定理を参照)。したがって、単一のプログラムで無限に多くのテキストの正確なコルモゴロフ複雑性を計算することはできません。
次の2つの文字列は、それぞれ32個の小文字の英字と数字で構成されています。
abababababababababababababababab、 そして4c1j5b2p0cv4w1x8rx2y39umgw5q85s7最初の文字列には、「write ab 16 times」という短い英語の説明があり、これは17文字です。2番目の文字列には、文字列自体を書き出す以外に(同じ文字セットを使用して)明確な簡単な説明はありません。つまり、「write 4c1j5b2p0cv4w1x8rx2y39umgw5q85s7」という文字列は38文字です。したがって、最初の文字列を書き出す操作は、2番目の文字列を書き出す操作よりも「複雑さが少ない」と言えます。
より厳密に言えば、文字列の複雑性とは、ある固定された普遍的な記述言語で文字列を記述した最短の長さのことである(記述言語の選択に対する複雑性の感度については後述する)。任意の文字列のコルモゴロフ複雑性は、文字列自体の長さより数バイト以上大きくなることはないことが示される。上記のababの例のように、コルモゴロフ複雑性が文字列のサイズに比べて小さい文字列は、複雑とはみなされない。
コルモゴロフ複雑性は任意の数学的対象に対して定義できますが、簡潔にするため、この記事では文字列に限定します。まず、文字列の記述言語を指定する必要があります。このような記述言語は、Lisp、Pascal、Javaなどの任意のコンピュータプログラミング言語に基づいて作成できます。Pが文字列xを出力するプログラムである場合、Pはxの記述です。記述の長さは、文字文字列としてのPの長さに、文字のビット数(ASCIIの場合は7 )を掛けたものです。
あるいは、チューリングマシンのエンコーディングを選択することもできます。エンコーディングとは、各チューリングマシンMにビット列<M>を対応付ける関数です。Mが入力wに対して文字列xを出力するチューリングマシンである場合、連結された文字列<M> wはxの記述となります。理論的な分析においては、このアプローチは詳細な形式的証明の構築に適しており、研究文献では一般的に好まれています。本稿では、非形式的なアプローチについて議論します。
任意の文字列sには少なくとも1つの説明があります。たとえば、上記の2番目の文字列は、次の擬似コードによって出力されます。
def generate_string2 (): return "4c1j5b2p0cv4w1x8rx2y39umgw5q85s7"一方、最初の文字列は(はるかに短い)擬似コードによって出力されます。
def generate_string1 (): return "ab" × 16文字列sの記述d ( s ) が最小長 (つまり、使用するビット数が最小) である場合、それはsの最小記述と呼ばれ、 d ( s )の長さ(つまり、最小記述のビット数) はsのコルモゴロフ複雑度K ( s ) と呼ばれます。記号的には、
最短記述の長さは記述言語の選択によって決まりますが、言語を変更することによる影響は限定されます(これは不変性定理と呼ばれる結果です。下記参照)。
コルモゴロフ複雑性には、プレーンとプレフィックスフリーの 2 つの定義があります。プレーン複雑性とは、任意のプログラムの最小記述長であり、次のように表されます。プレフィックスフリー複雑度は、プレフィックスフリーコードでエンコードされた任意のプログラムの最小記述長であり、次のように表される。単純な複雑性の方が直感的だが、接頭辞のない複雑性の方が研究しやすい。
デフォルトでは、すべての式は加法定数を除いてのみ成り立ちます。たとえば、つまり、つまり、。
させて有限バイナリ文字列をバイナリ文字列にマッピングする計算可能な関数である。任意の計算可能な に対して、 が成り立つ場合に限り、 は普遍関数である。関数を「プログラム」としてエンコードすることができます、したがって考えてみましょうプログラムインタプリタとして、プログラムの説明を記述した最初のセグメントと、それに続いてプログラムが処理すべきデータを受け取ります。
単純な複雑さの問題の1つは、直感的に言えば、連結された文字列を見ただけで出力文字列をどこで分割するかを判断する一般的な方法はないからです。長さを指定することで分割できます。またはしかし、それには追加のシンボル。実際、どんな存在するそのため[ 2 ]
通常、単純な複雑さを持つ不等式には次のような項があります。一方、接頭辞のない複雑さを持つ同じ不等式は、。
単純な複雑さの主な問題は、プログラムに何か余分なものがこっそりと忍び込んでいるということです。プログラムはコードで何かを表現するだけでなく、その長さも表現します。特に、プログラムはバイナリ数を表すことができる単にその長さによるものです。言い換えれば、単語の終わりを示すために終端記号を使用しているようなもので、2 つの記号ではなく 3 つの記号を使用していることになります。この欠点を修正するために、接頭辞のないコルモゴロフ複雑性を導入します。[ 3 ]
接頭辞のない普遍チューリングマシンは普遍部分計算可能関数であるそのドメインは、接頭辞のないバイナリ文字列の集合です。同様に、有効なプログラムは存在しません。が他の任意の接頭辞である場合、ドメインは接頭辞特性を満たします。たとえば、ユニバーサルチューリングマシンのすべての有効なプログラムがプログラムの他の場所では出現できない終了文字列で終了しました。接頭辞は不要になります。
文字列の接頭辞なしコルモゴロフ複雑度定義される 最短の自己限定プログラムの長さ出力。
接頭辞のない汎用マシンのさまざまな選択肢が最大で加算定数による。[ 4 ]
次のような意味で最適な記述言語がいくつか存在する。すなわち、ある記述言語でオブジェクトを記述した場合、その記述は一定のオーバーヘッドで最適な記述言語に利用できる。この一定のオーバーヘッドは、関連する言語のみに依存し、オブジェクトの記述内容や記述対象のオブジェクト自体には依存しない。
最適な記述言語の例を以下に示します。記述は2つの部分から構成されます。
より技術的な用語で言うと、記述の最初の部分はコンピュータプログラム(具体的には、記述言語で書かれた、対象物の言語用のコンパイラ)であり、2番目の部分は、そのコンピュータプログラムへの入力であり、出力として対象物を生成する。
不変性定理は次の通りである。任意の記述言語Lが与えられた場合、最適な記述言語は、一定のオーバーヘッドを伴うものの、少なくともLと同等の効率性を持つ。
証明:L内の任意の記述D は、まずL をコンピュータ プログラムPとして記述し(パート 1)、次に元の記述D をそのプログラムへの入力として使用することによって(パート 2)、最適言語での記述に変換できます。この新しい記述D ′の全長は(おおよそ)次のようになります。
Pの長さは定数であり、Dに依存しません。したがって、記述対象に関わらず、オーバーヘッドは最大でも定数です。そのため、最適な言語はこの加算定数を除いて普遍的です。
定理: K 1とK 2 がチューリング完全記述言語L 1とL 2に関する複雑性関数である場合、選択された言語L 1とL 2のみに依存する定数cが存在し、
証明:対称性により、すべての文字列sに対して、ある定数cが存在し、
ここで、言語L1で書かれたプログラムが、言語L2のインタプリタとして機能すると仮定します。
def interpret_language ( p : str )ここで、pはL2のプログラムである。インタプリタは以下の特性によって特徴付けられる。
interpret_language入力pに対して実行すると、 pを実行した結果が返されます。したがって、P がsの最小記述であるL 2のプログラムである場合、( P ) は文字列sを返します。このsの記述の長さは、interpret_language
interpret_language定数cとみなすことができます。これは、望ましい上限値を証明するものである。
アルゴリズム情報理論は、文字列(またはその他のデータ構造)におけるコルモゴロフ複雑度やその他の複雑度尺度を研究するコンピュータ科学の分野です。
コルモゴロフ複雑性の概念と理論は、レイ・ソロモノフが最初に発見した重要な定理に基づいています。ソロモノフは1960年にこの定理を発表し、「帰納的推論の一般理論に関する予備報告」[ 5 ]の中で、アルゴリズム確率の発明の一部としてこの定理を説明しました。彼は1964年の出版物「帰納的推論の形式理論」、Information and Controlのパート1とパート2で、より完全な説明を与えました。[ 6 ] [ 7 ]
アンドレイ・コルモゴロフは後にこの定理を1965年にProblems Inform. Transmissionで独自に発表した。 [ 8 ]グレゴリー・チャイティンもこの定理をJournal of the ACMで発表している。チャイティンの論文は1966年10月に提出され、1968年12月に改訂され、ソロモノフとコルモゴロフの論文の両方を引用している。[ 9 ]
この定理は、文字列をその記述(コード)から復号するアルゴリズムの中で、最適なアルゴリズムが存在することを述べている。このアルゴリズムは、あらゆる文字列に対して、他のどのアルゴリズムでも許容される最短のコードを、アルゴリズムに依存するが文字列自体には依存しない加算定数を除いて許容する。ソロモノフはこのアルゴリズムと、それが許容するコード長を用いて、文字列の「普遍的確率」を定義し、それに基づいて文字列の次の桁を帰納的に推論できるとした。コルモゴロフはこの定理を用いて、文字列の複雑性、ランダム性、情報量など、いくつかの関数を定義した。
コルモゴロフはソロモノフの研究を知ったとき、ソロモノフの優先権を認めた。[ 10 ]数年間、ソロモノフの研究は西側諸国よりもソ連でよく知られていた。しかし、科学界の一般的な見解は、この種の複雑性を、数列のランダム性に関心を持っていたコルモゴロフと結びつけることであり、アルゴリズム的確率は、普遍事前確率分布の発明を用いた予測に焦点を当てたソロモノフと結びつけられるようになった。記述的複雑性と確率を含むより広い領域は、しばしばコルモゴロフ複雑性と呼ばれる。コンピュータ科学者のミン・リーはこれをマタイ効果の一例と見なしている。「持っている者には、さらに与えられるだろう」[ 11 ]
コルモゴロフ複雑性またはアルゴリズム情報には、他にもいくつかのバリエーションが存在する。最も広く用いられているのは自己限定プログラムに基づくもので、主にレオニード・レヴィン(1974)によるものである。
マーク・バーギンは、アンドレイ・コルモゴロフが発表のために提出した論文の中で、ブルムの公理(ブルム 1967)に基づくコルモゴロフ複雑性への公理的アプローチを紹介した。 [ 12 ]
私たちは書くである、 どここれは、文字列のタプル x と y をコード化するための何らかの固定された方法を意味します。
加算因子を省略しますこのセクションは、 [ 4 ]に基づいています。
定理。
証明。単純な複雑性を定義するために使用される汎用チューリングマシンの任意のプログラムを取り上げ、まずプログラムの長さをバイナリで符号化し、次にその長さをプレフィックスフリーの符号化に変換することによって、プレフィックスフリーのプログラムに変換します。たとえば、プログラムの長さが9であると仮定すると、次のように変換できます。ここでは各桁を2倍にし、終端コードを追加します。プレフィックスフリーの汎用チューリングマシンは、他のマシン用のプログラムを次のように読み込むことができます。最初の部分は、別のマシンをシミュレートするようにマシンをプログラムするもので、一定のオーバーヘッドとなる。2番目の部分は長さが3番目の部分は長さが。
定理:存在するそのためより簡潔に言うと、同様に、、 そして。
証明。単純な計算量については、入力をそのまま出力にコピーするだけのプログラムを書けばよい。接頭辞不要の計算量については、文字列自体を書き出す前に、まず文字列の長さを記述する必要がある。
定理。(追加情報限界、劣加法性)
比較する方法がないことに注意してくださいそしてまたはまたはまたは文字列全体がは簡単に説明できるが、その部分文字列を説明するのは非常に難しい。
定理(情報の対称性)。
証明。片側は簡単。もう片側はそのため、数え上げの議論を用いる必要がある(38ページ[ 13 ])。
定理(情報非増加)任意の計算可能な関数に対して、 我々は持っています。
証明。チューリングマシンに、関数を記述するプログラムと文字列を記述するプログラムの2つを連続して読み込むようにプログラムする。次に、両方のプログラムをワークテープ上で実行して、そして、それを書き出してください。
一見すると、次のような任意のsに対してK ( s )を計算できるプログラムを書くのは簡単そうに見えるかもしれません。
def kolmogorov_complexity ( s : str ): for i = 1 to infinity : for each string p of length exactly i if is_valid_program ( p ) and evaluate ( p ) == s return iこのプログラムは、最短のプログラムから順に、考えられるすべてのプログラム(考えられるすべての文字列を順に調べ、有効なプログラムのみを考慮する)を順番に処理します。各プログラムを実行して、その結果を入力sと比較します。結果が一致すれば、プログラムの長さが返されます。
しかし、テスト対象のプログラムの中には、例えば無限ループを含むものなど、終了しないものがあるため、この方法はうまくいきません。停止問題の計算不可能性のため、実行前に何らかの方法でテストすることで、これらのプログラムをすべて回避する方法はありません。
さらに、どんなに高度なプログラムであっても、関数Kを計算することは不可能である。これは以下で証明される。
定理:コルモゴロフ複雑度が任意に大きい文字列が存在する。形式的には、任意の自然数nに対して、 K ( s ) ≥ nとなる文字列sが存在する。[注 2 ]
証明:そうでなければ、無限に存在するすべての可能な有限文字列は、nビット未満の複雑さを持つ有限個の[注 3 ]プログラムによって生成されてしまうことになる。
定理: Kは計算可能な関数ではない。言い換えれば、任意の文字列sを入力として受け取り、整数K ( s )を出力するプログラムは存在しない。
以下の背理法による証明では、プログラムを表すために単純なPascalライクな言語を使用します。証明を簡潔にするために、その記述(つまりインタプリタ)の長さを と仮定します。1,400,000ビット。矛盾を導くために、プログラムが存在すると仮定します。
def kolmogorov_complexity ( s : str )これは文字列sを入力として受け取り、K ( s ) を返します。すべてのプログラムは有限長なので、証明を簡単にするために、次のように仮定します。7,000,000,000ビット。次に、長さの次のプログラムを考えてみましょう。1288ビット:
def generate_complex_string (): str for i = 1 to infinity : for each string s of length exactly i if kolmogorov_complexity ( s ) >= 8000000000 return sサブルーチンとしてkolmogorov_complexity、プログラムは最短の文字列から始めて、少なくともコルモゴロフ複雑度を持つ文字列を返すまで、すべての文字列を試します。8,000,000,000ビット、[注4 ]つまり、それより短いプログラムでは生成できない文字列8,000,000,000ビット。ただし、 sを生成した上記のプログラムの全体の長さはわずかです。7,001,401,288ビット[注5 ]は矛盾している。(のコードがKolmogorovComplexity短い場合は矛盾は残る。長い場合は、で使用される定数を適切GenerateComplexStringに変更することができる。)[注6 ]
上記の証明は、ベリーのパラドックスと同様の矛盾を利用している。「1 2最小の3正の4整数5 6定義できない7 8 9 10 11 20未満の英語の単語で定義できない12 13 14 」 。KとH はチューリング等価であるため、停止問題Hの計算不能性から還元することによってKの計算不能性を示すことも可能である。[ 14 ]
プログラミング言語コミュニティでは、ユーモラスに「完全雇用定理」と呼ばれる派生的な法則があり、それは完璧なサイズ最適化コンパイラは存在しないというものである。
コルモゴロフ複雑性に関する連鎖律[ 15 ]は、すべてのXとYに対して、定数cが存在し、次のようになると述べている。
これは、 XとYを再現する最短プログラムは、Xを再現するプログラムと、Xが与えられた場合にYを再現するプログラムの合計よりも対数的に小さい項だけ大きい、ということを述べている。この記述を用いることで、コルモゴロフ複雑性に対する相互情報量の類似概念を定義できる。
K ( s )の上限を計算するのは簡単です 。文字列sを何らかの方法で圧縮し、選択した言語で対応する解凍器を実装し、解凍器を圧縮された文字列に連結し、結果として得られる文字列の長さ、具体的には、指定された言語での自己解凍アーカイブのサイズを測定します。
文字列s は、その記述の長さが | s | - cビットを超えない場合、数cで圧縮可能である。これは、 K ( s ) ≤ | s | - cと同等である。そうでない場合、sはcで圧縮不可能である。1 で圧縮不可能な文字列は、単に圧縮不可能であると言われる。これは、圧縮された文字列はすべて 1 つの非圧縮文字列にマッピングされるため適用される鳩の巣原理により、長さnの2nビットの文字列が存在するが、長さが n より短い文字列、つまり長さがn未満の文字列(長さ 0、1、...、n - 1) は2n - 1 個しかないため、圧縮不可能な文字列が存在する必要があるからである。[注 7 ]
同じ理由で、ほとんどの文字列は、大幅に圧縮できないという意味で複雑です。つまり、 K ( s )は、 sのビット長である | s |よりそれほど小さくありません。これを正確にするために、 nの値を固定します。長さnのビット列は2n個あります。これらのビット列の空間上の一様確率分布は、長さnの各文字列に正確に等しい重み 2 - nを割り当てます。
定理:長さnのビット列の空間における一様確率分布では、文字列がcによって圧縮されない確率は少なくとも1 − 2 − c +1 + 2 − nである。
この定理を証明するために、長さがn − cを超えない記述の数は、等比数列で与えられることに注意してください。
少なくとも
cで圧縮できない長さnのビット列。確率を求めるには、2 nで割ります。

prog1(s)prog2(s)上記の定理(§ 圧縮)によれば、ほとんどの文字列は、著しく「圧縮」された方法で記述できないという意味で複雑です。しかし、文字列の複雑さが一定の閾値を超えると、特定の文字列が複雑であるという事実を形式的に証明できないことが判明しました。正確な形式化は次のとおりです。まず、自然数に関する特定の公理系Sを固定します。この公理系は、文字列の複雑さに関する特定の主張 Aに対して、 S内の式FAを関連付けることができるほど強力でなければなりません。この関連付けは次の性質を持たなければなりません。
FAがSの公理から証明可能であれば、対応する主張Aは真でなければならない。この「形式化」はゲーデル番号付けに基づいて実現できる。
定理:定数Lが存在し、(L はSと記述言語の選択のみに依存する)文が成り立つような文字列s は存在しない。
証明のアイデア:この結果の証明は、ベリーのパラドックスで使用されている自己参照的な構成をモデルにしています。まず、 S内の証明を列挙するプログラムを取得し、整数Lを入力として受け取り、 S内の命題K ( x ) ≥ Lの証明に含まれる文字列xを出力する手続きPを指定します。次に、L をこの手続きPの長さよりも大きく設定すると、 K ( x ) ≥ Lで述べられているように、少なくともLであるx を出力するために必要なプログラムの長さは、手続きPによって文字列xが出力されたため、 Lより小さくなります。これは矛盾です。したがって、証明システムSでは、 Lが任意に大きい場合、特に手続き P の長さ (有限) よりも大きい場合、K ( x ) ≥ Lを証明することはできません。
証拠:
Sに含まれるすべての形式的証明の有効な列挙は、何らかの手順によって見つけることができる。
def nth_proof ( n : int )これは入力としてn を受け取り、何らかの証明を出力します。この関数はすべての証明を列挙します。これらの証明の中には、ここでは重要でない式の証明も含まれています。なぜなら、Sの言語におけるすべての可能な証明は、何らかのnに対して生成されるからです。これらの証明の中には、 Sの言語における定数sとnを含むK ( s ) ≥ nの形式の複雑性式も含まれています。手順があります。
def nth_proof_proves_complexity_formula ( n : int ): boolこれは、n番目の証明が実際に複雑性式K ( s ) ≥ Lを証明しているかどうかを判定する。文字列sと整数Lは、それぞれ次の手順で計算できる。
def string_nth_proof ( n : int )def complexity_lower_bound_nth_proof ( n : int ): int以下の手順を検討してください。
def generate_provably_complex_string ( n : int ): for i = 1 to infinity : if nth_proof_proves_complexity_formula ( i ) and complexity_lower_bound_nth_proof ( i ) ≥ n return string_nth_proof ( i )与えられたこの手順では、式を表す形式体系Sにおいて文字列と証明が見つかるまで、すべての証明を試します。一部の人にとって; そのような証明が存在しない場合は、無限ループに陥ります。
最後に、これらすべての手続き定義とメイン関数呼び出しから構成されるプログラムを考えてみましょう。
generate_provably_complex_string ( n ₀ )定数後ほど決定します。プログラム全体の長さは次のように表すことができます。、 どこは定数であり、整数値の長さを表しますバイナリ数字でエンコードされているという妥当な仮定の下で、プログラムの長さよりも大きい、つまり、これは明らかに次のとおりです。十分に大きいので、左辺は線形に増加する。右辺は対数的に増加するが、固定定数まで。
すると、次の形式の証明は得られない。" と間接的な引数からわかるように、Sで取得できます。complexity_lower_bound_nth_proof(i)すると、内部のループはgenerate_provably_complex_string最終的に終了し、その手順は次のような文字列sを返します。
これは矛盾である、証明終了
その結果、上記のプログラムは、選択された値で、永遠にループする必要があります。
同様の考え方は、チャイティン定数の性質を証明するためにも用いられる。
統計的推論と帰納的推論および機械学習の最小メッセージ長原理は、 1968 年にCS Wallaceと DM Boulton によって開発されました。MML はベイズ的(つまり、事前の信念を取り入れている)かつ情報理論的です。統計的不変性(つまり、極座標からデカルト座標への再パラメータ化などによって推論が変換される)、統計的一貫性(つまり、非常に難しい問題であっても、MML は任意の基礎モデルに収束する)、および効率性(つまり、MML モデルは可能な限り速く任意の真の基礎モデルに収束する)という望ましい特性を備えています。CS Wallace と DL Dowe(1999)は、MML とアルゴリズム情報理論(またはコルモゴロフ複雑性)との形式的な関連性を示しました。[ 18 ]
コルモゴロフのランダム性では、文字列(通常はビット列)がランダムであるとは、その文字列を生成できる最短のコンピュータプログラムの長さが、文字列自体の長さとほぼ同じである場合を指します。これを厳密にするために、文字列は長さコルモゴロフランダムと呼ばれるのは、 どこは、上記で定義した接頭辞フリーのコルモゴロフ複雑度です。この意味でのランダム文字列は、文字列自体よりも短いプログラムに文字列を「圧縮」することが不可能であるという意味で、圧縮不可能です。各長さのコルモゴロフランダム文字列が少なくとも1つ存在します。[ 19 ]
この定義は、有限アルファベットからの無限シーケンスのランダム性の概念を定義するように拡張できます。これらのアルゴリズム的にランダムなシーケンスは、 3 つの同等な方法で定義できます。1 つの方法は、測度論の有効な類似物を使用し、もう 1 つは有効なマルチンゲールを使用します。3 番目の方法は、無限シーケンスの初期セグメントの接頭辞なしコルモゴロフ複雑性が十分に速く増加する場合に、そのシーケンスがランダムであると定義します。つまり、長さnの初期セグメントの複雑性が常に少なくともn − cとなるような定数c が存在しなければなりません。[ 20 ]
動的システムの場合、軌道のエントロピー率とアルゴリズムの複雑さは、Brudno の定理によって関連付けられ、等式が成り立つ。ほぼすべてに当てはまる[ 21 ]
マルコフ情報源の出力の場合、コルモゴロフ複雑度は情報源のエントロピーと関連していることが[ 22 ]で示されている。より正確には、出力の長さで正規化されたマルコフ情報源の出力のコルモゴロフ複雑度は、(出力の長さが無限大に近づくにつれて)情報源のエントロピーにほぼ確実に収束する。
定理。(定理14.2.5 [ 23 ])バイナリ文字列の条件付きコルモゴロフ複雑度満たすどここれは二値エントロピー関数です(エントロピー率と混同しないでください)。
コルモゴロフ複雑度関数は、停止問題の判定と同等である。
停止オラクルがあれば、文字列のコルモゴロフ複雑度は、停止プログラムを辞書式順序で順番に実行し、そのうちの1つが文字列を出力するまで試行するだけで計算できます。
反対方向ははるかに複雑です。[ 24 ] [ 25 ]コルモゴロフ複雑性関数が与えられた場合、関数を構築できることが示されています。、したがってすべての大きな、 どこBusy Beaverシフト関数 (別名:)より低い値で関数を修正することにより上限値が得られますこれは停止問題を解決する。
このプログラムを検討してください入力として受け取る、そして使用する。
背理法によって証明するすべての大きな。
させて長文の働き者入力を受け付けない、この(接頭辞のない)プログラムを考えてみましょう。
プログラムが出力する文字列を。
このプログラムの長さは、 どこビジービーバーの長さから来ています、番号に(接頭辞なしの)エリアスデルタコードを使用することから来ています、 そしてプログラムの残りの部分から来ています。したがって、すべての大きなさらに、長さの可能なプログラムは限られているため、 我々は持っています鳩の巣原理により。仮定により、長さが 1 の文字列はすべて実行時動作を備えた最小限のプログラムがありますしたがって、弦は実行時動作を備えた最小限のプログラムがありますさらに、そのプログラムの長さはこれは、建設された。
万能チューリングマシンを修正する(接頭辞なし)コルモゴロフ複雑性を定義する際に使用されるものと同じ。文字列の(接頭辞なし)普遍確率を定義する。である言い換えれば、これは、一様ランダムなバイナリストリームを入力として与えられたとき、ユニバーサルチューリングマシンがストリームの特定のプレフィックスを読み取った後に停止し、出力する確率である。。
注記。入力ストリームがしかし、万能チューリングマシンは最初のセグメントを読み込んだ後、どこかの時点で停止するだろう。それ以上の入力を読み込まず、停止したときに書き込んだ出力テープへ。
定理。(定理 14.11.1 [ 23 ])
生物学の文脈では、コルモゴロフ複雑度は、複数の種で観察される対称性とモジュール構造は、進化が最小限のコルモゴロフ複雑度を好む傾向から生じるという議論に用いられてきた。[ 26 ]ゲノムを、タスクを解決したり一連の機能を実装したりしなければならないプログラムと考えると、進化のメカニズムによって見つけやすいという理由から、より短いプログラムが好まれるだろう。[ 27 ]このアプローチの一例として、昆虫種全体に見られるコンパス回路の8重対称性が挙げられる。これは、機能的であると同時に、自己複製ユニットから生成されるために最小限のコルモゴロフ複雑度を必要とする回路に対応する。[ 28 ]
2つの文字列の条件付きコルモゴロフ複雑度大まかに言えば、それは、手続きへの補助入力としてyが与えられたときのxのコルモゴロフ複雑度として定義されます。 [ 29 ] [ 30 ]したがって、(無条件の)コルモゴロフ複雑度は、シーケンスのは、出力を行う最短のバイナリ プログラムの長さです。汎用コンピュータ上で、生成に必要な最小限の情報量と考えることができる条件付きコルモゴロフ複雑度は、計算を行う最短のバイナリ プログラムの長さとして定義されます。いつ汎用コンピュータを使用して入力として与えられます。[ 31 ]
時間制限付きコルモゴロフ複雑度は、解を求めるプログラムの空間が、あらかじめ定義されたステップ数内で実行できるプログラムのみに限定されるコルモゴロフ複雑度の修正版です。[ 34 ]近似的な時間制限付きコルモゴロフ複雑度を決定する効率的なアルゴリズムが存在する可能性は、真の一方向関数が存在するかどうかの問題に関連していると仮説が立てられています。[ 35 ] [ 36 ]
forループは最終的に終了します。KolmogorovComplexityKolmogorovComplexityGenerateComplexString1,400,000以上1218 + 7·log 10 ( m ) < m、これは常に可能です。なぜなら、m はlog 10 ( m ) よりも速く増加するからです。長さ
nのバイナリ文字列は 2
n
個ありますが、長さが厳密に
n
より小さいバイナリ文字列は
2
n
-1 個しかありません。