Aho-Corasick 演算法 AC自動機實現:https://www.cnblogs.com/vipsoft/p/17722761.html
Trie樹,又叫字典樹,字首樹(Prefix Tree),單詞查詢樹,是一種多叉樹的結構.
{"a","apple","appeal","appear","bee","beef","cat"}
深色表示接受態
關鍵字集合{"pool", "prize", "prepare", "preview", "produce", "progress"}.
Trie 樹舉例
原字串集合:{ abcde 、aced 、bcdf 、bcff }
插入字串:aced 、cdaa
新字串集合:{ abcde 、abde、aced 、bcdf 、bcff 、cdaa }
字典樹的基本性質如下:
- 根節點不包含字元,除根節點外每一個節點都只包含一個字元
- 從根節點到某一節點,路徑上的字元連線起來,為該節點對應的字串
- 每個節點的所有子節點包含的字元都不相同.
Trie 樹的優缺點
Trie 樹是一種 以空間換時間 的資料結構。
- 優點:利用字串的 公共字首 來減少查詢時間,最大限度地減少無謂的字串比較。
公共字首:例如字串 abcdef 與 abcghi 有公共字首 abc 。
- 缺點:其每一個字元都可能包含至多字符集大小數目的指標。
在本模板採用子結點預設包含 所有字符集 的連線方式,
對於少量的字串儲存來說,大量的結點的兒子是空閒的,造成了 空間的浪費 。
當我們在瀏覽器的搜尋框中打出一個字串的字首時,它便實時的顯示出了以這個輸入為字首的一些字串,也就是說,它幫我們搜尋到了以這個輸入為字首的所有字串,並且顯示出了搜尋頻率較高的一些,這就是字典樹的一個應用場景:單詞自動補齊.
輸入“人工” 自動帶出人工開頭的關鍵字
應用場景
- 1、維護字串集合(即字典)。
- 2、向字串集合中插入字串(即建樹)。
- 3、查詢字串集合中是否有某個字串(即查詢)。
- 4、統計字串在集合中出現的個數(即統計)。
- 5、將字串集合按字典序排序(即字典序排序)。
- 6、求集合內兩個字串的LCP(Longest Common Prefix,最長公共字首)(即求最長公共字首)。