Trie樹(字首樹 字典樹)的介紹與實現方法

2021-10-25 11:36:33 字數 1423 閱讀 2099

3.trie的典型應用

4.trie樹的實現(leetcode208)

trie樹是一種多叉樹,具有以下性質:

因此可以發現,字首樹把字串儲存在數的遍歷路徑上,而非節點上。擁有相同字首的字串對應的遍歷字首路徑相同,這樣在業務中涉及大量擁有相同字首的字串時可以大量復用空間,節省開銷。

by the way, 通常在設計字首樹節點的時候回加入乙個數值來記錄字串的詞頻,同時可以標記該路徑是乙個字首還是實際的單詞。

trie樹的核心思想是用空間換時間,利用字串大量存在的公共字首來減少無謂的字串比較,從而達到提高查詢效率的目的。

插入和查詢的效率很高,t(n

)=o(

k)

t(n) = o(k)

t(n)=o

(k),k

kk為要插入和查詢的字串長度

相比較hash表或者hash樹,不同的關鍵字之間不會發生衝突

不需要求hash值,對於短字串較多的場景有明顯優勢

很好地支援了對關鍵字按照字典序排列

相比於hash方法,如果場景能夠使用的hash函式足夠好的話,trie樹查詢的效率遠低於hash方法

每個節點的孩子節點為字元表的長度,空間開銷大

從根節點向下遍歷,如果字串所有字元都有匹配的話,檢查最後乙個節點的標誌(詞頻),判斷是乙個字首還是乙個實際的單詞。

同3.1進行字串的檢索,通過最後乙個節點的標誌來獲得出現的詞頻。

trie樹可以對大量字串按字典序進行排序,思路也很簡單:遍歷一次所有關鍵字,將它們全部插入trie樹,樹的每個結點的所有孩子很顯然地按照字母表排序,然後先序遍歷輸出trie樹中所有關鍵字即可。

移動指標到指定字首路徑開頭節點,然後輸出所有遍歷結果即可。

字尾樹,ac自動機…

class

trie

;// 根節點

trienode* root;

// 建立節點

trienode*

createtrienode()

return node;

}public

:// 類的初始化

trie()

// 字串插入

void

insert

(string word)

else

if(i == word.

size()

-1)}

}// 字串查詢

bool

search

(string word)

}return

false;}

// 字首匹配

bool

startswith

(string prefix)

return

true;}

};

Trie樹,字典樹,字首樹

trie樹,字典樹,字首樹,都是同一顆樹,雜湊樹的變種題目鏈結 常用於文字的詞頻統計 它的特點就是,空間占用小,查詢快 它的儲存方式如下圖所示 對於從樹的根節點走到每乙個黑色節點所經過的路徑,如果將路徑上的字母都連起來的話,就都對應著詞典中的乙個單詞 trie樹,分別有插入,查詢和刪除3種操作,插入...

Trie樹 字典樹 字首樹

trie樹,即字典樹,又稱單詞查詢樹或鍵樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計和排序大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的字串比較,查詢效率比雜湊表高。trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的...

Trie樹(字典樹,字首樹)

4.字典樹的應用 5.字典樹的整體 例 hihocoder 1014 trie樹 乙個文字檔案,大約有一萬行,每行乙個詞,要求統計出其中最頻繁出現的前10個詞。對於給定字串,查詢某字典中以該字串開頭的字串的個數。等等 遇到這些問題,如果我們每次都是乙個乙個的統計,遍歷的話,是非常消耗時間的。但是如果...