字串應用之AC自動機

2021-07-26 08:53:53 字數 567 閱讀 6551

ac 自動機的用處:

查詢目標串中出現了哪些模式串(即文字字串 s 中出現了哪些字典中的單詞)

一種字串上的 dp

fail 樹應用

ac 自動機的演算法分三步:

構建所有『單詞』的 trie 樹

構建失配指標

模式匹配過程

1.void trie()

is_end[now]=true;}

2.自動機中乙個節點 p 的失配指標,指向整個自動機中的某個節點p->fail(除了根節點,不能指向自己),滿足 p->fail 所代表的字串是 p 所代表的字串的乙個字尾,且最長。如果我們現在知道 p 的失配 p->fail,則可以求出 p 的兒子p->ch[x] 的失配:

取 tmp = p->fail

若 tmp->ch[x] 不為空或 tmp 為根節點,則退出迴圈;

反之,令 tmp = tmp->fail,重複 

p->ch[x]->fail = tmp->ch[x]

將『空』設為根節點。

如果 p 沒有 x 這個兒子,令 p->fail->ch[x] 為 p 的 ch[x]

AC自動機模版 字串

ac自動機主要用於解決多模式串的匹配問題 具體指的是 如下圖中 模式串 p中有多個 字串,問這些字串在 主串s的出現的總次數 是字典樹 trie樹 的變種,一種偽樹形結構 主體是樹形的,但是由於加入了失敗指標,使得它變成了乙個有向圖 以當前節點為終點的 模式字串 的數量 int fail 1 fai...

字串 2 AC自動機

ac自動機,其實就是trie樹與kmp的結合,且有dfa 有限狀態機 的性質.理解的關鍵點 1.fail指標 起到回溯作用 2.每次匹配都是主串不動,移動指標now去回溯找字尾的字首 3.乙個優化點,將null指向root 編碼更簡單.考察時一般也會問道dfa的性質.ac自動機解決問題 1.多模式串...

AC自動機(字串多模匹配)

非常經典的乙個關於字串匹配的演算法 前置技能是 kmp和trie 重難點是fail指標 其實挺簡單的 其實不一定要會kmp,只要會它的思想就行了。所謂fail邊,其實就是乙個失敗指標,與kmp的next指標 類似於失敗指標,詳見我的kmp的部落格裡的p陣列 不同的是,next是對於乙個串而言的,而f...