AC自動機小結
阿新 • • 發佈:2018-07-02
打字 總結 獲取 前綴 前插 trie oot ref style
總結一下自己的心得體會,不講算法。。
AC自動機
AC自動機即Trie+KMP?是解決多模式串匹配的一種算法
它的構造方式如下:
- 將模式串全部插入Trie樹種
- 獲取Trie樹的fail指針
- 枚舉模式串在Trie樹上進行匹配
註意:在一般的匹配問題中,我們會把trie樹補為trie圖,雖然這樣會極大的降低匹配時間,但是當利用的$fail$樹中各節點相對位置(例如lca)的時候不建議這麽做
性質
如無特殊說明,$x$表示從$root$到$x$節點形成的字符串
1.$x$的$fail$指針指向的$y$為模式串中在$x$之前插入的串中與$x$有著最長公共後綴的前綴
2.$x$在$y$中出現的此處為$y$的路徑中,$fail$指針指向$x$的節點的數量
BZOJ2434: [Noi2011]阿貍的打字機
洛谷P3966 [TJOI2013]單詞
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是求和函數。
AC自動機小結