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


9

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

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

回答:


5

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

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

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

  • 1[T1]10m+21[T2]10m+20m+21[Tn]1,
    [Ti]Ti
  • n1Si1Siy=y1y2ymyj=1jSiyj=jSi

1Si11[Tj]1SiTj=[m]O(nm)

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

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