← カタログへ戻る #088

Rabin指紋

ローリングハッシュで部分文字列を高速検索するパズル

Rabin-Karp 法はパターン長 m と本文長 n に対し平均 O(n+m) でマッチを発見する。 本文上で長さ m の窓のハッシュを h_{i+1} = (h_i − s[i]·B^{m−1})·B + s[i+m]転がしながら更新するため、毎回全文走査せずに済む。 本ゲームでは更新を1ステップずつ可視化、可逆ロールバック (←) で巻き戻せる。横山研の rabin-karp プロジェクト由来。
Stage
1/4
Pos
0
Window Hash
Pattern Hash
Found
0
Coll.
0

パターン

本文

操作履歴 (可逆)

発見位置

緑=ハッシュ一致+文字列一致 (true positive)、赤=ハッシュ一致だが文字列不一致 (collision)。Rabin-Karp は最終確認に文字比較が必要。

操作

「1ステップ進む」で窓を1つ右に転がす。窓ハッシュとパターンハッシュが一致したら、文字列を比較して真の一致か衝突かを判定。

「ロールバック」で巻き戻し。Rabin-Karpの可逆な更新式を体感。

勝利条件: 全パターンを O(n+m) 計算量内 (=1パスで) に発見すること。