// Elias Delta – 大きな整数に対してGammaより高効率な汎用符号
n > 3 の整数に対してElias Gammaより高い圧縮効率を実現します。
追加パラメータなしで任意の正の整数に適用できます。
log₂(n) + 2log₂(log₂(n)) + 1 ビットを使用します。
Elias Deltaは正の整数 n を3つのステップで符号化します。1) L = ⌊log₂(n)⌋ + 1(ビット長)を求める。2) L をElias Gammaで符号化する。3) n の下位 L−1 ビットを連結する。この二重対数的な成長により、大きな整数に対してGammaより高効率でありながら汎用性を保ちます.
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はElias Gammaを改良した符号で、まず数のビット長をGammaで符号化し、その後に残りのビットを付加します。およそ log₂(n) + 2log₂(log₂(n)) + 1 ビットを使用し、大きな整数に対してより効率的です。
Gammaは 2⌊log₂(n)⌋ + 1 ビットを使用し、Deltaは log₂(n) + 2log₂(log₂(n)) + 1 ビットを使用します。n > 3 ではDeltaの方が有利で、n が大きくなるほど節約量も増えます。非常に小さい値(1~3)ではほぼ同程度です。
データの大部分が n > 3 の整数で構成されている場合はDeltaを選ぶとよいでしょう。非常に小さい整数(1~2)ではGammaの方がわずかに有利な場合があります。さらに大きな整数に対しては、Deltaを拡張したElias Omegaの利用も検討してください。
Deltaは中間的な位置付けです。Gammaは最も単純ですが効率は低めです。Deltaは圧縮率を改善します。Omegaは非常に大きな整数に対して最も高効率ですが、その分実装が複雑です。データ分布と要件に応じて選択してください。