BWT が機能するには、文字列に EOF 文字が含まれている必要があります。そうしないと、元の文字列を取得するために逆変換を実行できないためです。EOF がない場合、文字列 "ba" と "ab" は両方とも同じ変換バージョン ("ba") になります。EOF では、変換が異なります
ab ba
a b | a | b
b | a b a |
| a b | b a
つまり、ab は "|ab" に変換され、ba は "b|a" に変換されます。
EOF は、文字サイクルが開始するポイントをマークするため、BWT に必要です。
Re: ウィキペディアによると、EOF 文字なしで実行すると、
入力文字列の回転は同じ変換文字列につながるため、入力に「EOF」マーカーを追加するか、インデックスなどの情報で出力を補強しない限り、BWT を反転することはできません。すべてのローテーションのクラスからの入力文字列。
transform には全単射バージョンがあり、変換された文字列が元の文字列を一意に識別します。このバージョンでは、すべての文字列に同じ長さの一意の逆数があります。
全単射変換は、最初に入力をリンドン単語の非増加シーケンスに因数分解することによって計算されます。このような因数分解は、Chen–Fox–Lyndon の定理によって存在し、線形時間で見つけることができます。次に、アルゴリズムは、これらすべての単語のすべてのローテーションをまとめて並べ替えます。通常の Burrows-Wheeler 変換と同様に、これは n 個の文字列の並べ替えられたシーケンスを生成します。変換された文字列は、この並べ替えられたリスト内の各文字列の最後の文字を選択することによって取得されます。