字典樹(單詞查找樹、Trie)

單詞查找樹

1 基本概念

  百度百科對字典樹的介紹爲:是一種樹形結構,是一種哈希樹的變種
  《算法4》對字典樹的介紹爲:它由字符串鍵中的所有字符構造而成,允許使用被查找鍵中的字符進行查找
  不管各種材料對它的描述如何,總之它是長成下圖這樣的。
在這裏插入圖片描述

  從圖中我們可以很清楚的看到,從字典樹的根節點到每個葉子節點的路徑都是一個字符串。很顯然,這樣存儲字符串會節約很多空間(例如上圖中的NEWS和NOT公共前綴N只存一次就好了),而且便於查找不同字符串的公共前綴。
  另外,如果我們想要存儲的字符串是已經存好的字符串的子串(前綴),例如上圖中我們想要再存儲一個NEW。這時候我們只需要在每個節點上額外加一個標誌位用來表示以當前字符結尾的字符串是不是我們要存儲的字符串就好了,例如上圖的-1(每個節點都應該有這樣的標誌位)。

2 字典樹的應用

  根據字典樹的性質,有以下幾個應用場景:

  • 串的快速檢索:給出N個單詞組成的熟詞表,以及一篇全用小寫英文書寫的文章,要求按最早出現的順序寫出所有不在熟詞表中的生詞。
  • “串”排序:給定N個互不相同的僅由一個單詞構成的英文名,將他們按字典序從小到大輸出。用字典樹進行排序,採用數組的方式創建字典樹,這棵樹的每個結點的所有兒子很顯然地按照其字母大小排序。對這棵樹進行先序遍歷即可。
  • 最長公共前綴:對所有串建立字典樹,對於兩個串的最長公共前綴的長度即他們所在的結點的公共祖先個數,於是,問題就轉化爲當時公共祖先問題。

3 字典樹基本操作的實現

  字典樹基本操作的簡單實現可以通過這道Leetcode 208題來完成。

4 參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章