總結一下本身的心得體會,不講算法。。html
AC自動機即Trie+KMP?是解決多模式串匹配的一種算法算法
它的構造方式以下:函數
注意:在通常的匹配問題中,咱們會把trie樹補爲trie圖,雖然這樣會極大的下降匹配時間,可是當利用的$fail$樹中各節點相對位置(例如lca)的時候不建議這麼作post
如無特殊說明,$x$表示從$root$到$x$節點造成的字符串url
1.$x$的$fail$指針指向的$y$爲模式串中在$x$以前插入的串中與$x$有着最長公共後綴的前綴spa
2.$x$在$y$中出現的此處爲$y$的路徑中,$fail$指針指向$x$的節點的數量指針
3.點$x$與點$y$在$fail$樹中$lca$處的到的字符串,爲模式串中與$x,y$公共後綴最長的前綴字符串
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是求和函數。