我這個蒟蒻第一次寫部落格,有點小激動呢。
主要是最近剛學了ac自動機,學得糟糟糕糕,記錄一下,看到dalao們都在寫部落格,決定自己也寫一波【我好水的啦,寫的也不好】
ac自動機大概就是 trie+kmp=ac自動機
嗯,在kmp中,引入了字串失配最優轉移方案:失配函式f[i],在j位匹配失敗後,便轉到f[j]位匹配
同樣的道理,ac自動機就是公升維的kmp,在匹配時不僅要考慮當前模板串,還要顧及其它模板串,所以失配函式還要顧及其它模板串,匹配成功也要考慮其它模板串
所以,ac自動機採用了bfs構造f,還引入了last字尾鏈結,用以指向當前串匹配成功時同時可以匹配成功的串
具體來講ac自動機有三個操作
插入:
與trie樹的插入方式相同
void insert(int id)q.push(v);
f[v]=ch[f[u]][i];
last[v]=val[f[v]] ? f[v]:last[f[v]];
} }}
匹配:
void ac()print為沿著last的列印函式}
嗯就這樣
AC自動機 建立nlogn個AC自動機
string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...
AC自動機及字尾自動機
ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...
AC自動機演算法
ac自動機簡介 首先簡要介紹一下ac自動機 aho corasickautomation,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法之一。乙個常見的例子就是給出n個單詞,再給出一段包含m個字元的文章,讓你找出有多少個單詞在文章裡出現過。要搞懂ac自動機,先得有字典樹trie和kmp...