データ構造とアルゴリズム、略記 - マルチパターン文字列照合オートマトンAC

ACオートマトン


十分に理解されていない同じことが、噛まする時間があります

敏感なワードフィルタリング

単一パターン文字列マッチングアルゴリズム:(BF、RK、BM、KMP)各ユーザがメインの文字列入力に一致感受性パターン文字列などの機密言語の単語辞書を取って、あまり効率的です

マルチパターン文字列照合アルゴリズム:(トライ木、ACオートマトン)

トライ木:メインストリング、トライ木に一致先頭から最初の文字(文字はCとする)、などのユーザ入力。マッチがトライリーフノード、または文字が一致しないハーフウェイの出会いの位置を一致させるために始めたとき、我々はトライ木の次の文字、文字Cの再試合の最初から、メインの文字列を、シフトします。

単一BFパターンマッチングアルゴリズムに幾分類似このアプローチのトライ木、我々は、単一の文字列パターンマッチングアルゴリズム、KMPアルゴリズムBFアルゴリズムが改善されることを知って、次の配列の導入、その結果、一致バックさらにいくつかのよりモード列スライドとして、失敗した場合。

最適化され、さらにトライそれの効率を改善するために、単一のパターン文字列、複数列トライ木の改善の能力を描画する方法を改善?ACオートマトンアルゴリズムにこの使用。

古典的マルチパターン文字列照合アルゴリズム:ACオートマトン

ACオートマトンとトライ木の関係として、関係を持つ単純な文字列照合アルゴリズムを一致する単一の文字列、KMPアルゴリズム同様、前者のみ、複数のストリングを目的としています。そのため、AC自動機は、トライの上に実際にある、プラスKMPの次の類似した配列が、ここで次の配列は、ツリーを構築することですベール

 

各文字列マッチングアルゴリズムの概要:

単一パターン文字列マッチング:
1. BF:単純なシナリオでは、メインの文字列とパターン文字列は、長すぎるO(N-M *)ではない
文字セットの範囲が大きすぎず長すぎないパターン文字列、ハッシュ値または2. RK衝突する可能性が、O(N)の
3 BM:パターン文字列は、IDEルックアップシーンエディタとして、(重い前処理として)、好ましくは長すぎない;プリO(M * M)、O(N)と一致します、 。より多くの余分なスペースを必要とする、より複雑な実現
すべてのシナリオに適した、全体的なBM、O(N + M)よりも簡単に実装4. KMP 、 余分なスペースはO(N)の唯一次配列であるが、統計的に有意でBMは、未知の理由のために、より高速なようだ。
それはより速い比率BM / KMP、及びリアライズ+日曜日のアルゴリズムを理解しやすくするために見たとき5.にも情報をチェック、興味を持っているここで見ることができます:
HTTP:/ /www.inf.fh-flensburg.de/lang/algorithmen/pattern/sundayen.htm
https://www.jianshu.com/p/2e6eb7386cd3

2つの複数文字列マッチング:
1トライ:マルチモードのための共通のプレフィックス列より多くの試合(O(N * K))または(O(k))を見つけるために、このようなオートコンプリートプロンプト検索ボックスなどの共通のプレフィックスに基づいてシーンの。
2. ACオートマトン:テキストより多くの量のために O(N)であることが、複数のパターンのルックアップ完全一致。

 

 

おすすめ

転載: www.cnblogs.com/wod-Y/p/12180685.html