値の文字列を考えるログベースで、シャノンエントロピーを になる。私が理解していることから、基数 切り上げられたシャノンエントロピーは、値の1つを表すためのバイナリの最小ビット数です。
このウィキペディアのページの紹介から引用:
https://en.wikipedia.org/wiki/Entropy_%28information_theory%29
それでは、どのようにして3つの値を1ビットで表現できますか? は 、 は です。しかし、どのようにを表現できます か?
前もって感謝します。
値の文字列を考えるログベースで、シャノンエントロピーを になる。私が理解していることから、基数 切り上げられたシャノンエントロピーは、値の1つを表すためのバイナリの最小ビット数です。
このウィキペディアのページの紹介から引用:
https://en.wikipedia.org/wiki/Entropy_%28information_theory%29
それでは、どのようにして3つの値を1ビットで表現できますか? は 、 は です。しかし、どのようにを表現できます か?
前もって感謝します。
回答:
計算したエントロピーは、実際には特定の文字列ではなく、確率でを 生成し、それぞれ確率\ tfrac1 {10}でおよび Cを 生成シンボルのランダムソースに対するものです。、連続するシンボル間に相関関係はありません。この分布の計算されたエントロピー0.922は、平均して文字あたり0.922ビット未満を使用して、この分布から生成された文字列を表すことができないことを意味します。
このレートを達成するコードを開発するのは非常に難しいかもしれません。*例えば、ハフマン符号化は、符号割り当てう、及び に、及び の平均のために、それぞれ、 文字あたりのビット数。エントロピーからはかなり遠いですが、1文字あたり2ビットの単純なエンコードよりも優れています。より良いコーディングの試みは、おそらく、単一のBよりも連続し 10回のAの実行である可能性(確率)を 活用するでしょう。
*望みどおりに近づけることは難しくないことがわかりました。他の答えを見てください!
平均1ビット未満で各シンボルを表すことができる具体的なエンコードを次に示します。
まず、入力文字列を連続する文字のペアに分割します(たとえば、AAAAAAAABCはAA | AA | AA | AA | BCになります)。次に、AAを0として、ABを100として、ACを101として、BAを110として、CAを11100として、BBを111101として、CBを111110として、CCを111111としてエンコードし ます。シンボルの数、ただし、任意のエンコーディングを使用して最後のシンボルをエンコードすることができますが、入力が長い場合は実際には問題になりません。
これは、シンボルの独立したペアの分布のためのハフマンコードであり、Yuvalの答えでを選択することに対応します。を大きくと、さらに良いコードになります(彼が述べたように、限界でシャノンエントロピーに近づく)。
上記のエンコーディングのシンボルペアごとの平均ビット数は
つまりシンボルあたりビット。実際には、このような単純なエンコーディングのシャノンエントロピーからそれほど遠くはありません。
ましょうを超える次の分布で:場合次にと。
各について、接頭辞コードを構築して、
つまり、から多数の独立したサンプルをエンコードする場合、平均でサンプルあたりビットが必要です。直観的に、1ビット未満でできる理由は、個々のサンプルが可能性が非常に高いことです。
これはエントロピーの本当の意味であり、文字列の「エントロピー」を計算することはかなり無意味な運動であることを示しています。