AC自動機 萌新文章

2022-02-28 03:01:54 字數 645 閱讀 8132

我這個蒟蒻第一次寫部落格,有點小激動呢。

主要是最近剛學了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...