コルモゴロフの複雑さの近似


22

コルモゴロフの複雑さについて何かを研究し、VitanyiとLiのいくつかの記事と本を読んで、正規化圧縮距離の概念を使用して著者のスティロメトリーを検証しました(各著者がどのようにテキストとグループ文書を書くかを類似性によって識別します)。

その場合、データコンプレッサーをチューリングマシンとして使用できるため、データコンプレッサーを使用してコルモゴロフの複雑さを近似しました。

データ圧縮とプログラミング言語(ある種のコンプレッサーを記述する)に加えて、コルモゴロフの複雑さを近似するために他に使用できるものはありますか?使用できる他のアプローチはありますか?


私はあなたの質問を理解しているかどうかはわかりません:KCの定義にはチューリングマシンが含まれます。「プログラミング言語なしで」コルモゴルフの複雑さを近似するとはどういう意味ですか?
コーディ

1
GZipなどの圧縮ソフトウェアを使用して文字列を圧縮します。出力のサイズは、文字列のKCの上限です。
M.アラガン

@cody:正確に言うと、研究でデータコンプレッサー(zip、bzip、ppmd)を使用してKCを概算しました。データコンプレッサーは、厳密にはプログラムではありません。だから、言語(= C / prolog /何でもプログラムを書く)とデータコンプレッサー(= zip、gzipを使用) ppmc、ppmd ...):)
woliveirajr

1
データ圧縮プログラムの定義は、プログラム(「uncompressor」)と別の文字列(圧縮された文字列)で文字列のKCを近似するプログラムとまったく同じであるように思えます。
コーディ

回答:


9

あなたの質問に対する1つの可能な答えはこれだと思います:疑似乱数ジェネレータ ます。いくつかの強力な持っている発電機を選んだようにしてください攻撃:それに対しての乱数ジェネレータ攻撃のための(我々の目的のために)で、アルゴリズム、入力プログラムの文字列が与えられたとき、決定シード、そのように。次に、のKCを近似します。G A s A s G A s = s sGGAs A(s)G(A(s))=ss

input: s
Compute A(s);
if |A(s)| + |G| > |s| output: |s|
otherwise output: |A(s)| + |G|

どこは、を計算するプログラムの長さです線形ジェネレーターの場合、非常に短いことがよくあります)。G s |G|G(s)

実際には、乱数ジェネレーターの攻撃は説明されていないことに注意してください。それらは失敗するか、不完全な結果をもたらす可能性があります。その場合、返すようにアルゴリズムを調整できます攻撃の結果が不十分な場合。同じことは、圧縮アルゴリズムにも当てはまります。|s|

圧縮アルゴリズムとは対照的に、このアプローチの注意点は、圧縮アルゴリズムは一般的にKCの計算に適しているため文字列で動作するように調整されているのに対し、攻撃はがの画像にある場合にのみ機能することです(ありそうにない)。GsG


7

確率分布。データ確率を与える計算可能な確率分布がある場合、クラフトの不等式により、それをビットで圧縮する計算可能なコンプレッサーがあります(端数ビットに反対する場合は切り上げます)。これは、ほぼすべての生成機械学習アルゴリズムを使用できることを意味します。log p x p(x)logp(x)

コルモゴロフの複雑さが非常に興味深い理由は、それが究極の圧縮アルゴリズム(とにかく圧縮を気にする人)だからではなく、究極の学習アルゴリズムだからです。圧縮と学習は基本的に同じことです。データのパターンを見つけることです。この考えに基づいて構築された統計的フレームワークは最小記述長と呼ばれ、コルモゴロフの複雑さから直接インスパイアされました。

cstheory StackExchangeでこの質問もご覧ください。


5

文法コーディングは、使用頻度の低い圧縮アルゴリズムのバージョンであり、コルモゴロフの複雑さの「大まかな」推定値と見なすことができます。文法コーディングは、主にテキストベースのコーパスのLempel-Zivからの圧縮ではあまり改善されないため、他のより一般的なアプローチほど圧縮アルゴリズムほど一般的には使用されませんが、他の種類のデータではうまくいくかもしれません。考え方は、文法規則を使用して文字列を「圧縮」することです。文法の派生により、DAG(より複雑でないツリー)が発生する可能性があるため、実質的な表現の複雑さがあります。

別のオプションは、文字列を表す最小/最小回路を見つけることですが、これは非常に複雑な計算を行うことが知られており、小さな文字列でのみ成功する可能性があります。

一般に、近似が計算に近づくほど、それはより扱いにくくなります。K(x)

K(x)

Lempel-Zivの「ランレングスエンコーディング」タイプのアプローチに加えて、他の圧縮アルゴリズム方式もあります。たとえば、ベクトル代数とSVDを圧縮アルゴリズムとして使用できます。また、フーリエ変換は、JPG規格などで画像を圧縮するために頻繁に使用されます。


1
K(x)

良い点ですが、損失の多いアルゴリズムには通常、「損失」を決定する調整可能なパラメーターがあり、理論的には十分な「用語」または「周波数」で損失を達成できます。また、損失のないパラメーター値は入力サンプルにも依存します圧縮アルゴリズムの「レンズ」を通して見た彼らの「ランダム対相対的な順序」...上
vzn

1
@codyとvzn:答えてくれて、ロスレスxロッシー圧縮に関する博士号の良いアイデアをくれました:)
woliveirajr

JPEGはDFTではなくDCTを使用します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.