鏈接放在這里,有點(diǎn)難理解,至少我個(gè)人是的。
后綴自動(dòng)機(jī)是一種有限狀態(tài)自動(dòng)機(jī),其功能是識(shí)別字符串是否是母串的后綴。它能解決的問題當(dāng)然不僅僅是判斷是不是后綴這種事,跟字符串的連續(xù)子串有關(guān)的問題都可以往這個(gè)方面考慮,畢竟字符串的每個(gè)連續(xù)字串都可以看做是兩個(gè)長度不同的后綴去掉他們的公共部分得到的。
自動(dòng)機(jī)由五個(gè)部分組成:alpha:字符集,state:狀態(tài)集合,init:初始狀態(tài)集合,end:結(jié)束狀態(tài)集合,trans:狀態(tài)轉(zhuǎn)移函數(shù)。
定義trans(s,ch)為當(dāng)前狀態(tài)為s,讀入字符ch后所達(dá)到的狀態(tài)。若不存在此轉(zhuǎn)移,則將轉(zhuǎn)移的結(jié)果定義為null,表示不存在的狀態(tài)。自動(dòng)機(jī)A能識(shí)別的字符串就是所有使得trans(init,x)∈end的字符串,令這些字符串組成的集合為Reg(A)。另外,對(duì)于自動(dòng)機(jī)中的某一狀態(tài)s,從s開始能識(shí)別的字符串記為Reg(s)。
考慮字符串“aabbabd”的后綴,一共有7個(gè),簡單的想法是可以將這7個(gè)后綴構(gòu)造成一個(gè)trie樹(ppt里的圖好像有問題,多了abbd這條路線),缺點(diǎn)是狀態(tài)數(shù)太多,對(duì)于長度為N的字符串,其節(jié)點(diǎn)的規(guī)模會(huì)達(dá)到O(N^2),而后綴自動(dòng)機(jī)相比起來就小多了,其狀態(tài)數(shù)是線性