Bitapアルゴリズムについて理解しようとしていますが、アルゴリズムのステップの背後にある理由を理解するのに苦労しています。
アルゴリズムの基本的な前提を理解しています (間違っている場合は修正してください)。
Two strings: PATTERN (the desired string)
TEXT (the String to be perused for the presence of PATTERN)
Two indices: i (currently processing index in PATTERN), 1 <= i < PATTERN.SIZE
j (arbitrary index in TEXT)
Match state S(x): S(PATTERN(i)) = S(PATTERN(i-1)) && PATTERN[i] == TEXT[j], S(0) = 1
英語ではPATTERN.substring(0,i)
、前の部分文字列PATTERN.substring(0, i-1)
が正常に一致し、文字 atPATTERN[i]
が文字 at と同じである場合、 は TEXT の部分文字列と一致しTEXT[j]
ます。
私が理解していないのは、これのビットシフトの実装です。このアルゴリズムの詳細を説明している公式の論文は基本的にそれを説明していますが、何が起こっているのかを視覚化できないようです。 アルゴリズムの仕様は論文の最初の 2 ページのみですが、重要な部分を強調します。
概念のビットシフト バージョンは次のとおりです。
サンプル検索文字列の T[text] は次のとおりです。
そして、これがアルゴリズムのトレースです。
OR
具体的には、T テーブルが何を意味するのか、現在の状態でエントリを作成する理由がわかりません。
誰かが正確に何が起こっているのかを理解するのを手伝ってくれたらありがたいです