個人認為trie,kmp,ac自動機是思想非常明確的,ac自動機的性質是與kmp演算法的思想類似的(失配後跳轉)
而kmp是線性的,ac自動機是在tire樹上跑kmp,為方便那些不會用指標的小朋友(我也不會。。。。)
我的tire樹,kmp演算法的next,ac自動機的fail全是用陣列實現的!!!!(還有誰???!!!)
所以上板子
1.kmp
2.trie
3.ac自動機
void make()return;
}void kmp(int len)
}
struct data node[1000001];char s[100000];
void build(char*str)
}void print(char*str)
now=node[now].num[k];
str++;
}}
struct datatrie[10001];
queuebfs;
int fail[10001];
int n,tot,len;
int ans[10001];
char s[10001][51];
char t[10000001];
void add(int q)
head++; }}
void bbfs()
bfs.pop();//隊首元素出隊 }}
void make(){
int now=0;
for(int i=0;i
AC自動機及字尾自動機
ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...
字尾自動機 序列自動機綜合
好像序列自動機還沒有寫過 串長為n的串共有n 1個節點,除了串中的n個節點,還有乙個空的根節點放在串首。每個節點至多有26條出邊,每條邊連向它之後的第乙個字元。串中的任意乙個子串行對應了一條根到某個節點的路徑。且每條路徑對應乙個不同的子串行。每個節點的parent是這個字母上一次出現的位置。更新只要...
有窮自動機
problem description adfa 證明 adfa是可判定的。實驗方法 編寫乙個演算法 程式,對於任意給定的輸入,可以判定adfa。input 有多個測試序列,測試結束於測試檔案結束 每個測試序列的第一行為幾個正整數n m t a分別表示有n個狀態,從a開始m個小寫字母組成的字符集,第...