辞書式コード

辞書式符号(レキシコード)は、貪欲法で生成される誤り訂正符号であり、非常に優れた特性を持つ。これらは、ウラジミール・レーベンシュタイン[1]ジョン・ホートン・コンウェイニール・スローン[2]によって独立に構築された。2進辞書式符号は線形符号であり、ハミング符号2進ゴレイ符号などが含まれる。[2]

工事

有限体上の長さn、最小距離dのレキシコードは、すべてゼロのベクトルから始めて、それまでに追加したベクトルからハミング距離dが最小となる次のベクトル(辞書式順序)を反復的に追加することで生成されます。例えば、長さ 3 、最小距離 2 のレキシコードは、次の例で「X」でマークされたベクトルで構成されます。

ベクターコードで?
000X
001
010
011X
100
101X
110X
111

以下に、最大2mのコードワード辞書から得られる、dビット最小ハミング距離によるnビット辞書全体の表を示します。例えば、F4コード(n=4、d=2、m=3)、拡張ハミングコード(n=8、d=4、m=4)、そして特にゴレイコード(n=24、d=8、m=12)は、近隣のコードと比較して非常にコンパクトです。

n \ d123456789101112131415161718
11
221
3321
44311
554211
6653211
77643111
887442111
9985422111
1010965321111
111110764321111
1212118744221111
13131298543211111
1414131096543211111
151514111076542211111
1616151111875522111111
17171612119865322111111
181817131299763322111111
1919181413109874322111111
20201915141110985432211111
212120161512111095533221111
2222211716121211106543221111
2323221817131212116654222111
2424231918141312127655322211
2525242019151412128765332211
2626252120161512129876432221
2727262221171613129977543222
28282723221817131310987553322
292928242319181413111088654322
303029252419191514121198665422
3131302625201916151212109666532
32323126262120161613121110766633
33...32...26...21...16...13...11...7...6...3

すべての奇数 d ビットの辞書距離は、最後の次元を除いた偶数 d+1 ビットの距離の正確なコピーであるため、奇数次元空間では上記の d+1 偶数次元空間よりも新しいものや興味深いものを作成することはできません。

レキシコードは線形なので、その基底を使って構築することもできます[3]

実装

次の C は辞書式コードを生成し、パラメータは Golay コード (N=24、D=8) に設定されます。

#include <stdio.h> #include <stdlib.h> int main () { /* GOLAY CODE 生成 */ int i , j , k ; int _pc [ 1 << 16 ] = { 0 }; // PopCount マクロfor ( i = 0 ; i < ( 1 << 16 ); i ++ ) for ( j = 0 ; j < 16 ; j ++ ) _pc [ i ] += ( i >> j ) & 1 ; #define pc(X) (_pc[(X)&0xffff] + _pc[((X)>>16)&0xffff]) #define N 24 // N ビット#define D 8 // D ビット距離unsigned int * z = malloc ( 1 << 29 ); for ( i = j = 0 ; i < ( 1 << N ); i ++ ) { // 以前のすべての辞書コードをスキャンしますfor ( k = j -1 ; k >= 0 ; k -- ) // 辞書コード。if ( pc ( z [ k ] ^ i ) < D ) // 逆チェックbreak ; // はるかに高速です... if ( k == -1 ) { // 新しい辞書コードを追加しますfor ( k = 0 ; k < N ; k ++ ) // それを印刷しますprintf ( "%d" , ( i >> k ) & 1 ); printf ( " : %d \n " , j ); z [ j ++ ] = i                                                                                      ; } } }     

組み合わせゲーム理論

辞書式符号の理論は、組み合わせゲーム理論と密接に関連している。特に、距離dの2進辞書式符号の符号語は、石の山の集合上で行われるグランディのゲームにおける勝利の位置を符号化する。このゲームでは、各移動は任意の1つの山を最大d − 1個の小さな山に置き換えることで構成され、最後の石を取ることが目標となる。[2]

注記

  1. ^ Levenšteĭn, VI (1960)、「Об одном классе систематических кодов」 [体系的コードのクラス]、Doklady Akademii Nauk SSSR (ロシア語)、131 (5): 1011–1014MR  0122629;ソビエト数学誌『ドクラディ1』(1960年)、368-371頁の英訳
  2. ^ abc Conway, John H. ; Sloane, NJA (1986)、「辞書式コード:ゲーム理論からの誤り訂正コード」、IEEE Transactions on Information Theory32 (3): 337– 348、CiteSeerX 10.1.1.392.795doi :10.1109/TIT.1986.1057187、MR  0838197 
  3. ^ Trachtenberg, Ari (2002)、「与えられたトレリス複雑度を持つ辞書式コードの設計」、IEEE Transactions on Information Theory48 (1): 89– 100、doi :10.1109/18.971740、MR  1866958
  • ボブ・ジェンキンスのバイナリ辞書表
  • 辞書とその変種のオンラインジェネレータ
  • OEISシーケンス A075928 (ハミング距離 4 のバイナリ レキシコード内のコードワードのリストを 10 進数で記述したもの。)
  • グラフ上の誤り訂正符号:レキシコード、トレリス、因子グラフ
Retrieved from "https://en.wikipedia.org/w/index.php?title=Lexicographic_code&oldid=1195022069"