> rice | adaptive | compress <
// Rice 符号化 – 調整可能なパラメータによる適応的な整数圧縮
>> 特長
調整可能なパラメータ
k を調整して、さまざまなデータ分布に対して最適な圧縮を実現します。
幾何分布データ
幾何分布や指数分布を持つデータに最適です。
高速な符号化
単純な除算と余り演算で高速に処理できます。
>> 技術情報
Rice 符号化の仕組み
Rice 符号化では、各整数 n を 2^k で割って商 q と余り r を得ます。商はユニタリ(q 個の 1 の後に 0)で符号化し、余りは k ビットの 2 進数として表します。これにより、k パラメータを通じてデータ分布に適応する可変長コードが得られます。
Rice 符号化の例 (k=2)
k=2, M=2^2=4 0 → q=0, r=0 → 0|00 → 000 1 → q=0, r=1 → 0|01 → 001 2 → q=0, r=2 → 0|10 → 010 3 → q=0, r=3 → 0|11 → 011 4 → q=1, r=0 → 10|00 → 1000 5 → q=1, r=1 → 10|01 → 1001 6 → q=1, r=2 → 10|10 → 1010 7 → q=1, r=3 → 10|11 → 1011 8 → q=2, r=0 → 110|00 → 11000 k が大きい: ユニタリビットが少なくなり、2 進ビットが多くなる k が小さい: ユニタリビットが多くなり、2 進ビットが少なくなる
Rice 符号化を使う理由
- データ分布に適応
- 実装が簡単
- 高速なエンコード/デコード
- センサーデータに適している
- 小さな整数に対して効率的
>> よくある質問
Rice 符号化とは何ですか?
Rice 符号化は、幾何分布に対して特に効率的な可変長エントロピー符号化方式です。割る数 M を 2 の冪 (M = 2^k) に制限した Golomb 符号化の特殊なケースであり、ビットシフトを用いることで高速な実装が可能です。
k パラメータはどのように選べばよいですか?
最適な k の値はデータ分布に依存します。平均値 μ を持つデータに対しては、おおよそ k ≈ log₂(μ × ln(2)) と考えられます。小さな k (0–2) はごく小さい値に適しており、大きな k (4–8) はより大きな値をもつデータに向いています。解析機能を使って、データに最適な k を見つけてください。
Rice と Golomb 符号化の違いは?
Rice 符号化は M = 2^k という制約を持つ Golomb 符号化の部分集合です。この制約により、Rice 符号化は(除算ではなく)ビットシフトで高速に実装できますが、圧縮効率はわずかに劣る場合があります。Golomb 符号化では任意の M を選択してより高い圧縮率を得られますが、Rice は速度のために一部の効率を犠牲にします。
Rice 符号化はどこで使われていますか?
Rice 符号化は、ロスレス音声圧縮 (FLAC, ALAC)、画像圧縮 (JPEG-LS)、および幾何分布を持つセンサーデータなどで広く利用されています。特に、指数関数的に減少する確率を持つ小さな非負整数に対して高い効果を発揮します。