イワラビンを利用-Karp検索のための複数のパターン文字列
-
19-09-2019 - |
質問
に応じて wikipedia にイワラビン-Karp文字列照合アルゴリズムで使用される複数の異なるパターン文字列を同時に維持しつつ線形複雑になります。ここでは簡単にすべてのパターンは同じ長さのものだくか、また保存O(n)複雑化する場合のパターンの異なる長さです。できいてくださいくつかの光す。
編集(2011年):
Wikipediaの記事が更新されていな債合わせの複数パターンの異なる長さのO(n)
解決
くなった場合には、正しい答えるか:
構築中 のハッシュ値を確認できた場合は、セットの文字列ハッシュ.通称、 現在の ハッシュ値です。のハッシュ機能コードが通常として実施され、ループ内にはループを挿入が可能で当社のクイックルック。
もちろん、しなければなり m
の最大文字列の長さの文字列です。
更新: からWikipedia
[...]
for i from 1 to n-m+1
if hs ∈ hsubs
if s[i..i+m-1] = a substring with hash hs
return i
hs := hash(s[i+1..i+m]) // <---- calculating current hash
[...]
計算しました 現在の ハッシュに m
ます。各ステップがあり 仮設 ハッシュ値を見ることができるのでup(O(1)複雑性のセットのハッシュ.すべてのハッシュと同じサイズ、32ビット.
更新2: る償却(平均)O(n)時間で複雑?
遅いという現象が起こるのだろうと m
の最大文字列の長さです。ここではまることができる逆行するものとなっている。
と ハッシュ移行部分文字列の検索 固定 m
サイズを開発して参りましたO(n)時間で複雑になります。
または可変長文字列で設定できま m
最小文字列の長さです。また、セットのハッシュしません准ハッシュの文字列が最初のm-文字のです。
現在模索しながら、テキストを確認している場合、現在のハッシュのハッシュセットおよびその関連する文字列。
この技術を増やすとアラームの誤報が平均ではO(n)時間で複雑になります。
他のヒント
それはです。ハッシュを計算する H(S、J)(文字のハッシュ文字列のj番目の位置から始まる S ) O(M)を取り長さ M の文字列の上の時間。しかし、あなたは、のH(S、jは1 +)のように表現することができるので、コンピューティング、のH(S、jは1 +)は、一定の時間で行うことができることをしたらのH(S、j)の関数の。
O(M)+ O(1)=> O(M)、すなわち、線形時間
ここどこのリンクですこれは、
(「ラビン - カープが速くなりますか?」などの項を参照)、より詳細に記載されています