AC自動機 trie樹實現高效多模式匹配字典

2021-08-21 07:23:17 字數 557 閱讀 7919

經常會遇到一類需求,在一段字串中查詢所有能匹配上的模式,比如查詢一段文字匹配上字典中哪些短語。這時為了高效處理,就會考慮 ac 自動機,即 aho-corasick 自動機演算法。它的核心思想是通過有限自動機巧妙地將字元比較轉化為了狀態轉移。

通過 ac 自動機能做到匹配時不需要回溯,而且時間複雜度為 o(n),即時間複雜度與詞典的規模無關。

暴力匹配就是乙個乙個比較,將模式串從頭到尾匹配主串字串,如下圖模式串」abce」比較主串,一旦遇到不相同的則往後移以為,重新開始比較,直到比對完主串,接著第二個模式串繼續比較。該方法簡單暴力,很好理解,但時間複雜度高,o(mn)。

ac自動機主要是將 n 個模式串構建成乙個確定性的樹形有限狀態機,然後將主串作為該有限狀態機的輸入,使該狀態機進行狀態的轉換,當到達某些特定的狀態時則說明發生模式匹配。

通過例子來理解,以he、she、his、hers為模式串,ushers為主串,構成了如下的狀態機。

ac自動機 匹配最長字首 多模匹配 AC自動機

精確的字串匹配演算法有 單模匹配演算法,比如,kmp bm演算法等 和 多模匹配演算法,比如,wu manber ac演算法等。ac演算法 aho corasick 是kmp演算法向多模式串情形的擴充套件,該演算法使用一種特殊的自動機,即ac自動機。ac自動機由一組模式串p生成,是trie的擴充套件...

AC自動機(多模式匹配)

ac自動機主要解決的問題 多模式匹配 kmp則屬於單模式匹配 n個單詞在m個字元的文章中,出現過多少次。主要分三步 構建trie樹 構建失敗指標 尋找匹配個數 trie樹 又稱字典樹 單詞查詢樹,是一種樹形結構,用於儲存大量的字串。它的優點是 利用字串的公共字首來節約儲存空間。具體參見 失敗指標 作...

字串演算法模板 Trie樹 AC自動機

trie樹 為ac自動機做鋪墊的乙個資料結構,trie用來找一段字串中字首出現在trie樹上的單詞,還有經典的xor問題 時間複雜度 o n o n o n include include using namespace std const int max 1e6 10 int trie max 2...