資料結構 自動機用於多個目標字串的匹配查詢

2021-06-25 18:40:41 字數 889 閱讀 7946

字尾自動機在trie數基礎上,引入了父節點parent,字首nxt,後續child,匹配單詞數量cnt,其中child[i]為當前字串遇到char i時跳轉到的節點。

以下內容可以用bfs由淺入深初始化自動機。這個過程類似kmp,我覺得不同在於kmp不儲存每乙個節點遇到任意字母後跳轉位置,而只儲存它與字首串(nxt)匹配位置

如下:注意n#parent已經初始化完成。

if n#parent!=root(即n#parent#nxt!=n#parent)

n#nxt=node[n#parent#nxt].child[n#idx]

if n#child[i]==null

n#child[i]=node[n#nxt]->child[i]

n#cnt+=node[n#nxt].cnt

#include #include #include #include #define maxlen 1100000

#define childcnt 26

using namespace std;

struct node

};struct trieg

string print(int i)

void add(char* s)

g.init();

cin>>buf;

bool res=g.match(buf);

if(res) cout<<"yes"

}

字串匹配 有限自動機

有限自動機包含乙個五元組 q,q0,a,q表示狀態有限集 q0為初始狀態 q0 q a表示接受狀態的集合 a 是q的子集 是輸入字母表 是狀態轉移函式 對於終態函式我還不是很理解,希望大家不吝賜教 演算法導論上有乙個例子 p ababaca 那麼轉換成五元組是 q q0 0 注 0狀態什麼都沒有 a...

利用有限自動機進行字串匹配

乙個有限自動機m是乙個5元組,q,q0,f,m,g q 狀態的集合,q0 開始狀態,f接收狀態,m字符集,g 轉換函式 文字字串t,匹配模式p 1,2,3.m 每乙個匹配模式都有乙個對應的有限自動機,將字串t按序輸入到自動機中,如果到達接受狀態,則匹配成功,下面介紹如何為p構造自動機。1.狀態集合q...

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

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