Burrows and Wheeler の論文からブロック ソート アルゴリズムを読んでいます。これはアルゴリズムのステップです:
S=アブラカダブラとする
N 個の単語 W[0, ... , N - 1] の配列 W を初期化し、W[i] に文字 S'[i, ... , i + k - 1] が含まれるようにします。単語は、k 文字列の辞書式比較と一致します。文字を単語にパックすることには 2 つの利点があります。アラインされたメモリ アクセスを使用して、一度に 2 つのプレフィックスを k バイトずつ比較でき、多くの遅いケースを排除できます。
(注:はk文字が追加されS'
たオリジナルです。kは機械語に収まる文字数です (私は 32 ビット マシンを使用しているので、)S
EOF
k=4
EOF = '$'
私が間違っている場合は修正してください:
S'= abracadabra$$$$
W= abra brac raca acad cada adab dabr abra bra$ ra$$ a$$$
次に、アルゴリズムは、配列にインデックスをS
付けることにより、 (V という名前の)のサフィックス配列をソートする必要があると言います。W
にインデックスを付けてサフィックスをソートする方法が完全にはわかりませんW
。例: ソートのある時点で、2 つの接尾辞 と を取得i
しj
、それらを比較する必要があるとします。にインデックスを付けているためW
、一度に 4 文字をチェックしています。
最初の 4 文字が両方とも同じであるとします。次に、サフィックスごとに次の 4 文字をチェックする必要があり、W
. これは正しいですか?この「文字を言葉に詰め込む」ことは本当にスピードアップするのでしょうか?