AC自動機學習筆記

2022-03-14 09:22:44 字數 752 閱讀 2629

ac自動機

----多個模板的字串匹配

字典樹trie加上失配邊構成

插入操作:ac.insert(p[i],i);

構造失配函式:ac.getfail();

計算文字串t中每個模板串的匹配數:ac.find(t);

時間複雜度 o(n+km) (總長度)

以下是加過注釋的lrj模板:

struct

acauto

int idx(char c)//

用於返回編號

void insert(char *s,int v)//

將字串s插入字典樹中,其中v是字串的編號,從1開始編號

u=ch[u][c];

}val[u]=v;//

在字串末尾做出標記,標記為字串的編號i

}

void print(int j)//

用於輸出處理,

}int getfail()//

bfs構造失配函式

}while (!q.empty())

q.push(u);

f[u]=ch[f[r]][c];//

last[u]=val[f[u]]?f[u]:last[f[u]];//

//否則標記為其字尾鏈結的值(類似於遞迴)。

} }

}void find(char *t)//

ac自動機主函式,在文字串t中尋找模板

}}ac;

AC自動機 學習筆記

是一種數學模型,大概就是由一堆狀態和狀態轉移規則等東西構成,能與外界交換資訊,並改變動作。這個是理論上的東西,了解就行,對ac自動機的理解沒有大影響。通俗的講就是在trie上做kmp,處理多模式串匹配問題。trie 的每個結點就是乙個狀態,根結點是初始狀態。ac自動機的行為被定義為一下3個函式 1....

AC自動機學習筆記

ac自動機是基於字典樹和fail指標來快速一類解決多串匹配的問題。先用所有模式串建乙個字典樹。然後用bfs搞出每個節點的fail指標。fail指標是指向 和當前 字首的字尾有最長匹配的字首。洛谷3808 掃文字串的時候,標記一下訪問過的字典樹上的節點。include using namespace ...

AC自動機學習筆記

title ac自動機學習筆記 date 2020 08 31 15 53 40 tags 8月的最後一天,還是完成了ac自動機的學習。在熟練掌握了kmp後,我發現ac自動機並沒有想象的那麼難,既不難理解,也不難實現,於是決定寫點東西記錄一下。本篇主要談談ac自動機的理論,思想。首先我們必須要明確乙...