データ構造のハフマンツリー
ハフマンコーディングは、コードの長さが対応する文字の相対頻度または重みに依存するように、文字にコードを提供します。ハフマンコードは可変長であり、プレフィックスはありません(つまり、コードが他のコードのプレフィックスではないことを意味します)。プレフィックスのないバイナリコードは、エンコードされた文字がリーフに格納されたバイナリツリーとして表示または視覚化できます。
ハフマンツリーは、最小の外部パスの重みに関連付けられたバイナリツリーとして扱われます。つまり、特定のリーフのセットの重み付きパスの長さの最小の合計に関連付けられたバイナリツリーです。したがって、目標は、外部パスの重みが最小のツリーを構築することです。
例を以下に示します-
文字の頻度表
レター | z | k | m | c | u | d | l | e |
頻度 | 2 | 7 | 24 | 32 | 37 | 42 | 42 | 120 |
レター | 頻度 | コード | ビット |
---|---|---|---|
e | 120 | 0 | 1 |
d | 42 | 101 | 3 |
l | 42 | 110 | 3 |
u | 37 | 100 | 3 |
c | 32 | 1110 | 4 |
m | 24 | 11111 | 5 |
k | 7 | 111101 | 6 |
z | 2 | 111100 | 6 |
ハフマンツリー(上記の例の場合)を以下に示します-
-
データ構造の範囲ツリー
範囲ツリーは、ポイントのリストを保持するための順序付けられたツリーデータ構造として定義されます。これにより、特定の範囲内のすべてのポイントを効率的に取得でき、通常は2次元以上で実装されます。 O(log d のクエリ時間が速いことを除いて、kdツリーと同じです。 n + k)が、O(n log d-1 のストレージが悪い n)、dはスペースの次元を示し、nはツリー内のポイントの数を示し、kは特定のクエリで取得されたポイントの数を示します。範囲ツリーは、間隔ツリーで区別できます。ポイントを格納して特定の範囲内のポイントを効率的に取得できるようにする代わりに、間隔ツリーは間隔を保存し、特定のポ
-
データ構造内の高さが制限されたハフマンツリー
高さ制限または深さ制限のハフマンツリーの図を以下に示します ツリーの深さの制限は、ほとんどの実際のハフマンの実装が対処しなければならない重要な問題です。 ハフマン構造は高さや深さを制限しません。もしそうなら、それが「最適」である可能性はありません。確かに、ハフマンツリーの最大の深さはフィボナッチ数列によって制限されますが、それは必要以上の深さのための十分な余地を残します。 ハフマンツリーの深さを制限する理由は何ですか?高速ハフマンデコーダーはルックアップテーブルを実装します。メモリコストを軽減するために複数のテーブルレベルを実装することは可能ですが、Huff0などの非常に高速なデコ