AC自動機算法

在計算機科學中 ， Aho – Corasick算法是由Alfred V. Aho和Margaret J.Corasick 發明的字符串搜索算法 ， 用於在輸入的一串字符串中匹配有限組 “ 字典 ” 中的子串 。 它與普通字符串匹配的不同點在於同時與所有字典串進行匹配 。 算法均攤情況下具有近似於線性的時間複雜度 ， 約爲字符串的長度加所有匹配的數量 。 然而由於需要找到所有匹配數 ， 如果每個子串互相匹配 （ 如字典爲a ， aa ， aaa ， aaaa ， 輸入的字符串爲aaaa ） ， 算法的時間複雜度會近似於匹配的二次函數 。 該算法主要依靠構造一個有限狀態機 （ 類似於在一個trie樹中添加失配指針 ） 來實現 。 這些額外的失配指針允許在查找字符串失敗時進行回退 （ 例如設Trie樹的單詞cat匹配失敗 ， 但是在Trie樹中存在另一個單詞cart ， 失配指針就會指向前綴ca ） ， 轉向某前綴的其他分支 ， 免於重複匹配前綴 ， 提高算法效率 。 當一個字典串集合是已知的, 就可以以離線方式先將自動機求出並儲存以供日後使用 ， 在這種情況下 ， 算法的時間複雜度爲輸入字符串長度和匹配數量之和 。 UNIX系統中的一個命令fgrep就是以AC自動機算法作爲基礎實現的 。