文字列のアルゴリズムの概要

KMP

シングルモードの文字列照合アルゴリズム。

\(S \)テンプレート文字列で、\(T \)は、テキスト文字列、です\(次(I)\)文字列を表す\(T [1 ... i]が \) 全部または接尾辞\(Tを\ )最長プレフィックスの長さは、使用して不一致\(次の(ⅰ)\)に移しました。

時間の複雑さが償却された\(O(| S | + | T |)\)

Manacher

すべてのパリンドロームのサブストリングの文字列を探しています。

\(maxright \)全ての点回文ストリング最大右現在のプロセスのために、もし現在のプロセスの中心\(I \当量maxright \)加速度情報の前には、利用することができます。

時間の複雑さが共有されている均等\(O(| S |)\)

ハッシュ

何も言うことがないように思えます。

トライ木

何も言うことがないように思えます。

時間の複雑さがある\(O(\ SUM | S |)\)

ACオートマトン

マルチモードの文字列照合アルゴリズム。

\((X)\不合格)へのポインタ\(X \)をすべてのサフィックスは、文字列を表す最長のテンプレート文字列として接頭辞、及びである\(KMP \)ミスマッチを使用して、同様に\ ((X)\失敗)転送を。

いくつかの注目すべき性質:

  1. \(トライ\)ツリーノードの祖先は、文字列の接頭辞です。

  2. \(\不合格)ツリーノードの祖先は、文字列の接尾辞です。

接尾辞配列

すべてのサフィックスは、辞書順にソート。

\(SA [i]が\)キーワードのための最初のランクを表す(私は\)\をサフィックスに。

\(RK [i]が\)接尾辞です\(私は\)ランキング。

\(SC [I] \)第二のキーワードランキングがさ表す(iは\)\サフィックス。

アルゴリズムは使用することである\(rk_ {WD} \)\(SC_ {WD} \)リリース\(SA_ {WD} \) 次いで\(SA_ {WD} \)\(rk_ {WD} \)リリース\(2WDのrk_ {} \)と、\(SA_ {WD} \)リリース\(2WD SC_ {} \)

時間複雑です\(O(| S | \ログイン| S |)\)

\(高さ[i]が\)ランクを表す\(I-1 \)サフィックスとランク(Iは\)\を接尾辞\(LCP \)の性質によって、(\高さ[RK [I- 1] ] -1 \当量高さ[RKは、[それは] \) に等しい株式\(O(| S |) \) 時間複雑内で決定されます。

多くの場合で\(ST \)テーブルまたは互いに素セットまたは単調スタックまたはデカルトツリーのマージやヒューリスティックアルゴリズムを消費。

サフィックスオートマトン

コンストラクタはたくさんの悩みを言うことはありません、時間の複雑さがある\(| S | O(\ varsigma)\)

文字列に格納されたすべてのサブサフィックスオートマトン列、\(\右)サブ列記憶の同じセットに同じノードです。

\(親\)は、木は接尾文字列先祖のノード、メンテナンスである\(右\)メソッドが設定されている(親\)\ツリーまたはツリーのマージセグメントヒューリスティックマージ。

遊ぶ\(親\)ツリーは、文字列の接尾辞木です。

Shiftキーを押しそして、

シングルモードの文字列照合アルゴリズム。

テンプレート文字列であらかじめ設定した位置にあるすべての文字、\(ビットセットを\)メンテナンス。一致しながら\(ビット集合の\)鋳型配列の位置に一致させることができる電流を維持することによって\(ビット集合の\)の急加速運転の間で転送することができます。

ワイルドカード文字列を使用することは非常に容易がある場合。

時間の複雑さはある\(O(\ FRAC {| S | \タイムズ| T |} {\オメガ})\)

おすすめ

転載: www.cnblogs.com/ErkkiErkko/p/11084522.html