> elias | delta | optimal <
// Elias Delta – 大きな整数に対してGammaより高効率な汎用符号
Gammaより高効率
n > 3 の整数に対してElias Gammaより高い圧縮効率を実現します。
汎用コード
追加パラメータなしで任意の正の整数に適用できます。
良好な漸近特性
log₂(n) + 2log₂(log₂(n)) + 1 ビットを使用します。
>> 技術情報
Elias Deltaの仕組み:
Elias Deltaは正の整数 n を3つのステップで符号化します。1) L = ⌊log₂(n)⌋ + 1(ビット長)を求める。2) L をElias Gammaで符号化する。3) n の下位 L−1 ビットを連結する。この二重対数的な成長により、大きな整数に対してGammaより高効率でありながら汎用性を保ちます.
Delta符号化の例:
n=1: L=1, Gamma(1)='1', bits='', Delta='1' n=2: L=2, Gamma(2)='010', bits='0', Delta='0100' n=3: L=2, Gamma(2)='010', bits='1', Delta='0101' n=4: L=3, Gamma(3)='011', bits='00', Delta='01100' n=16: L=5, Gamma(5)='00101', bits='0000', Delta='001010000' 長さの比較: n | Gamma | Delta | 差分 1 | 1 | 1 | 0 16 | 9 | 9 | 0 100 | 13 | 12 | 1 1000 | 19 | 16 | 3
Elias Deltaを使う理由:
- ▸n > 3 の場合にGammaより効率が高い
- ▸パラメータ調整が不要
- ▸プレフィックスフリーで一意に復号可能な符号
- ▸中程度の整数サイズに適した選択肢
- ▸Elias Omegaへつながるステップ
>> よくある質問
Elias Delta符号とは何ですか?
Elias DeltaはElias Gammaを改良した符号で、まず数のビット長をGammaで符号化し、その後に残りのビットを付加します。およそ log₂(n) + 2log₂(log₂(n)) + 1 ビットを使用し、大きな整数に対してより効率的です。
DeltaとGammaの違いは?
Gammaは 2⌊log₂(n)⌋ + 1 ビットを使用し、Deltaは log₂(n) + 2log₂(log₂(n)) + 1 ビットを使用します。n > 3 ではDeltaの方が有利で、n が大きくなるほど節約量も増えます。非常に小さい値(1~3)ではほぼ同程度です。
GammaではなくDeltaを使うべきタイミングは?
データの大部分が n > 3 の整数で構成されている場合はDeltaを選ぶとよいでしょう。非常に小さい整数(1~2)ではGammaの方がわずかに有利な場合があります。さらに大きな整数に対しては、Deltaを拡張したElias Omegaの利用も検討してください。
Deltaは最良のElias符号ですか?
Deltaは中間的な位置付けです。Gammaは最も単純ですが効率は低めです。Deltaは圧縮率を改善します。Omegaは非常に大きな整数に対して最も高効率ですが、その分実装が複雑です。データ分布と要件に応じて選択してください。