Trie字典

Trie樹,又叫字典樹,前綴樹(Prefix Tree),單詞查找樹,是一種多叉樹的結構.
image
{"a","apple","appeal","appear","bee","beef","cat"} 深色表示接受態
image
關鍵字集合{"pool", "prize", "prepare", "preview", "produce", "progress"}.
image

Trie 樹舉例
原字符串集合:{ abcde 、aced 、bcdf 、bcff }
插入字符串:aced 、cdaa
新字符串集合:{ abcde 、abde、aced 、bcdf 、bcff 、cdaa }
image

字典樹的基本性質如下:

  • 根節點不包含字符,除根節點外每一個節點都只包含一個字符
  • 從根節點到某一節點,路徑上的字符連接起來,爲該節點對應的字符串
  • 每個節點的所有子節點包含的字符都不相同.

Trie 樹的優缺點
Trie 樹是一種 以空間換時間 的數據結構。

  • 優點:利用字符串的 公共前綴 來減少查詢時間,最大限度地減少無謂的字符串比較。

    公共前綴:例如字符串 abcdef 與 abcghi 有公共前綴 abc 。

  • 缺點:其每一個字符都可能包含至多字符集大小數目的指針。

在本模板採用子結點默認包含 所有字符集 的連接方式,
對於少量的字符串存儲來說,大量的結點的兒子是空閒的,造成了 空間的浪費 。

當我們在瀏覽器的搜索框中打出一個字符串的前綴時,它便實時的顯示出了以這個輸入爲前綴的一些字符串,也就是說,它幫我們搜索到了以這個輸入爲前綴的所有字符串,並且顯示出了搜索頻率較高的一些,這就是字典樹的一個應用場景:單詞自動補齊.

輸入“人工” 自動帶出人工開頭的關鍵字

應用場景

  • 1、維護字符串集合(即字典)。
  • 2、向字符串集合中插入字符串(即建樹)。
  • 3、查詢字符串集合中是否有某個字符串(即查詢)。
  • 4、統計字符串在集合中出現的個數(即統計)。
  • 5、將字符串集合按字典序排序(即字典序排序)。
  • 6、求集合內兩個字符串的LCP(Longest Common Prefix,最長公共前綴)(即求最長公共前綴)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章