AC自動機小結

總結一下本身的心得體會,不講算法。。html

AC自動機

AC自動機即Trie+KMP?是解決多模式串匹配的一種算法算法

它的構造方式以下:函數

  1. 將模式串所有插入Trie樹種
  2. 獲取Trie樹的fail指針
  3. 枚舉模式串在Trie樹上進行匹配

注意:在通常的匹配問題中,咱們會把trie樹補爲trie圖,雖然這樣會極大的下降匹配時間,可是當利用的$fail$樹中各節點相對位置(例如lca)的時候不建議這麼作post

性質

如無特殊說明,$x$表示從$root$到$x$節點造成的字符串url

1.$x$的$fail$指針指向的$y$爲模式串中在$x$以前插入的串中與$x$有着最長公共後綴的前綴spa

2.$x$在$y$中出現的此處爲$y$的路徑中,$fail$指針指向$x$的節點的數量指針

BZOJ2434: [Noi2011]阿狸的打字機htm

洛谷P3966 [TJOI2013]單詞blog

3.點$x$與點$y$在$fail$樹中$lca$處的到的字符串,爲模式串中與$x,y$公共後綴最長的前綴字符串

BZOJ2746: [HEOI2012]旅行問題

 

AC自動機還常常與dp結合食用,套路通常爲$f[i][j]$表示當前長度爲$i$,在AC自動機上第$j$號節點時的答案,轉移的時候枚舉出邊

 

時間複雜度

Tire樹暴跳fail的複雜度爲$O(max(L(P_i))L(T))$其中L串的長度函數,P是模式串,T是目標串。

好比模式串爲$aaaaaaaaaaaaaaaaaaaaa$

Trie圖的時間複雜性爲:$O(L(T))$

對於構造的代價是$O(sum(L(P_i)))$其中sum是求和函數。

相關文章
相關標籤/搜索