// カンマコード – 自動的に境界が分かる自己区切りバイナリコード
連続したコードの間に区切り文字が不要です。
ユニaryの長さプレフィックスに続いてデータビットを並べます。
タブー変種により、必要に応じて特定のビットパターンを避けられます。
カンマコードは整数 n を次のようにエンコードします。1) ビット長 L-1 をユニary表現(L-1 個の 1 の後に 0)で書く。2) 先頭の 1 を除いた 2 進表現を後ろに続ける。タブー変種では、11 のようなパターンを避けるようにエンコードを変更し、一部の通信チャネルで有用になります.
Basic Comma Code: 0 → 0 (special case) 1 → 01 (0 ones + 0 + empty) 2 → 100 (1 one + 0 + '0') 3 → 101 (1 one + 0 + '1') 4 → 11000 (2 ones + 0 + '00') 5 → 11001 (2 ones + 0 + '01') Concatenated: 1,2,3 → 01 100 101 → 01100101 Self-delimiting - can decode without separators Taboo variant avoids '11' pattern: Uses different encoding to prevent consecutive 1s
カンマコードは、ビット長をユニaryで表したプレフィックスとその後のデータビットで整数を表現する自己区切りバイナリコードです。コードをカンマ区切りのリストのように、明示的な区切り記号なしで連結できることからこの名称が付いています。
ユニaryの長さプレフィックスにより、デコーダは後続のデータビット数を正確に知ることができます。k 個の 1 のあとに 0 が現れたら、その直後にちょうど k ビットを読み取ればよいと分かります。これにより複数のコードを区切り文字なしで連結できます。
タブーカンマコードは、特定のビットパターン(例: 11)を避けるようにエンコード方法を変更したものです。同期マーカーなど、特定のパターンが特別な意味を持つ通信チャネルで役立ちます。
カンマコードは、データ圧縮、ネットワークプロトコル、ストレージシステムなど、自己区切り性が重要な場面で利用されます。可変長の整数を複数保存する際に、個別の長さフィールドなしで扱える点が特に有用です。