ドントケアとのパターンマッチング:複数のパターン


9

Kalaiの2ページのSODAペーパーは、ドントケア(1文字に一致するワイルドカード)を使用したパターンマッチングのためのシンプルで効率的なアルゴリズムを提供します。本質的には、畳み込みと同じくらい簡単です。

しかし、ドントケアで複数のパターンを検索している場合はどうなりますか?それでも、たとえばFFTベースの手法でなんとかしてそれを解決できますか?

回答:


5

複数パターンの場合、少なくとも強力な指数時間仮説が失敗しない限り、それぞれをスキャンするだけが最善の解決策になる可能性があります。

セット所与ことを思い出しとT 1、T 2、... 、T nは宇宙オーバー[ M ]が存在する場合、我々が決めることができれば、SはIおよびTのjはそのようなことSはI ∪ T J = [ M ]の時間におけるO (N 2 - εポリ(M ))S1,S2,…,SnT1,T2,…,Tn[m]SiTjSi∪Tj=[m]O(n2−εpoly⁡(m))、その後、SETHは失敗、すなわち私たちは、時間のランニングとCNF-SATアルゴリズムを持っている。O∗(2(1−ε/2)n)

セットおよびT 1、T 2、… 、T nが与えられた場合、上記の問題を次のようにバイナリアルファベットを無視するマルチパターンマッチングとしてエンコードします。S1,S2,…,SnT1,T2,…,Tn

  • 1[T1]10m+21[T2]10m+2…0m+21[Tn]1,
    [Ti]Ti
  • n1⟨Si⟩1⟨Si⟩y=y1y2…ymyj=1j∉Siyj=∗j∈Si∗

1⟨Si⟩11[Tj]1Si∪Tj=[m]O(nm)

(これは、パターンの前処理に多くの時間を使用するアルゴリズムについては何も言っていないことに注意してください。たとえば、パターンの全長で2次式です。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.