Trie樹

Trie樹

1、 概述Trie樹,又稱字典樹,單詞查找樹或者前綴樹,是一種用於快速檢索的多叉樹結構。Trie樹可以利用字符串的公共前綴來節約存儲空間。如下圖所示,該trie樹用10個節點保存了6個字符串tea,ten,to,in,inn,int:在該trie樹中,字符串in,inn和int的公共前綴是“in”,因此可以只存儲一份“in”以節省空間。當然,如果系統中存在大量字符串且這些字符串基本沒有公共前綴,則相應的trie樹將非常消耗內存,這也是trie樹的一個缺點。Trie樹的基本性質可以歸納爲:(1)根節點不包含字符,除根節點意外每個節點只包含一個字符。(2)從根節點到某一個節點,路徑上經過的字符連接起來,爲該節點對應的字符串。(3)每個節點的所有子節點包含的字符串不相同。

 

(圖是借的,哈哈)

優點:

1.      查找、增、刪速度快,時間複雜度O(n),n爲出的層級。

2.      字典樹(Trie)可以保存一些字符串->值的對應關係。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不過 Trie 的 key 只能是字符串。Trie更適用於字符串的查找。

缺點:空間消耗很高

應用:

      1、串的快速檢索

       給出N個單詞組成的熟詞表,以及一篇全用小寫英文書寫的文章,請你按最早出現的順序寫出所有不在熟詞表中的生詞。

      方法1:可以將英文文章中的所有單詞逐個與熟詞表進行比較,O(N)=O(n*avg(length1)*N*avg(length2)) = O(n*N)

      方法2:採用hash表,

     方法3:採用字典樹,將該熟詞表構成字典樹,然後通過字典樹進行查找。建樹的時間複雜度:O(n) = O(N),查找的時間複雜度,只和樹的深度相關,而與熟詞表中有多少個單詞無關,樹的深度又與單詞的長度有關,而單詞最長不過30個字符,因此O(N)=O(1);另外在空間複雜度上又優於其他的算法,由於公共前綴的存在,不需要大量存儲重複的字符。

    2、串的排序

       給定N個互不相同的僅由一個單詞構成的英文名,讓你將他們按字典序從小到大輸出。

       用字典樹進行排序,採用數組的方式創建字典樹,因爲樹的每個結點的所有子結點很顯然是按照其字母大小排序的,那麼對待這棵樹進行先序遍歷即可。

  3、最長公共前綴(搜索引擎的熱詞搜索)

       對所有串建立字典樹

 

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