數(shù)據(jù)結(jié)構(gòu)與算法筆記day21:Trie樹|AC自動(dòng)機(jī)

? ? 1Trie樹

????????這節(jié)課學(xué)習(xí)了一種特殊的樹,Trie樹。Trie樹是一種解決字符串快速匹配問題的數(shù)據(jù)結(jié)構(gòu)。如果用來構(gòu)建Trie樹的這一組字符串中,前綴重復(fù)的情況并不是很多,那Trie樹這種數(shù)據(jù)結(jié)構(gòu)總體上來講是比較費(fèi)內(nèi)存的,是一種空間換時(shí)間的解決問題思路。

? ? ? ? 盡管比較耗費(fèi)內(nèi)存,但是對內(nèi)存不敏感或者內(nèi)存消耗在接受范圍內(nèi)的情況下,在Trie樹中做字符串匹配還是非常高效的,時(shí)間復(fù)雜度是O(k),k表示要匹配的字符串的長度。

? ? ? ? 但是,Trie樹的優(yōu)勢并不在于,用它來做動(dòng)態(tài)集合數(shù)據(jù)的查找,因?yàn)檫@個(gè)工作完全可以由更加合適的散列表或者紅黑樹來替代。Trie樹最有優(yōu)勢的是查找前綴匹配的字符串,比如搜索引擎中的關(guān)鍵詞提示功能這個(gè)場景,就比較適合用它來解決,也是Trie樹比較經(jīng)典的應(yīng)用場景。??

????2AC自動(dòng)機(jī)

? ? ? ? 這節(jié)課學(xué)習(xí)了多模式串匹配算法,AC自動(dòng)機(jī)。單模式串匹配算法是為了快速在主串中查找一個(gè)模式串,而多模式串匹配算法是為了快速在主串中查找多個(gè)模式串。

? ? ? ? AC自動(dòng)機(jī)是基于Trie樹的一種改進(jìn)算法,它跟Trie樹的關(guān)系,就像單模式串中KMP算法和BF算法的關(guān)系一樣。KMP算法中有一個(gè)非常關(guān)鍵的next數(shù)組,類比到AC自動(dòng)機(jī)中就是失敗指針。而且,AC自動(dòng)機(jī)失敗指針的構(gòu)建過程,跟KMP算法中計(jì)算next數(shù)組極其相似。所以,要理解AC自動(dòng)機(jī),最好先掌握KMP算法,因?yàn)锳C自動(dòng)機(jī)其實(shí)就是KMP算法在多模式串上的改造。

? ? ? ? 整個(gè)AC自動(dòng)機(jī)算法包含兩個(gè)部分:第一部分是將多個(gè)模式串構(gòu)建成AC自動(dòng)機(jī),第二部分是在AC自動(dòng)機(jī)中匹配子串。第一部分又分為兩個(gè)小的步驟,一個(gè)是將模式串構(gòu)建成Trie樹,另一個(gè)是在Trie樹上構(gòu)建失敗指針

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容