字首樹(字典樹,單詞查詢樹,Trie樹)

2021-08-28 09:12:26 字數 1202 閱讀 9943

參考**: 概述

字首樹又名字典樹,單詞查詢樹,trie樹,是一種多路樹形結構,是雜湊樹的變種,和hash效率有一拼,是一種用於快速檢索的多叉樹結構。

典型應用是用於統計和排序大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:最大限度地減少無謂的字串比較,查詢效率比雜湊表高

trie的核心思想是空間換時間。利用字串的公共字首來降低查詢時間的開銷以達到提高效率的目的。

trie樹也有它的缺點,trie樹的記憶體消耗非常大。

性質:不同字串的相同字首只儲存乙份。

操作:查詢,插入,刪除。

舉個栗子:給出一組單詞,inn, int, ate, age, adv,ant, 我們可以得到下面的trie:

從上面可以發現一些trie樹的特性:

1)根節點不包含字元,除根節點外的每乙個子節點都包含乙個字元。

2)從根節點到某一節點的路徑上的字元連線起來,就是該節點對應的字串。

3)每個節點的所有子節點包含的字元都不相同。

4)每條邊對應乙個字母。每個節點對應一項字首。葉節點對應最長字首,即單詞本身。

單詞inn與單詞int有共同的字首「in」, 因此他們共享左邊的一條分支,root->i->in。同理,ate, age, adv, 和ant共享字首"a",所以他們共享從根節點到節點"a"的邊。

查詢操縱非常簡單。比如要查詢int,順著路徑i -> in -> int就找到了。

搭建trie的基本演算法也很簡單,無非是逐一把每則單詞的每個字母插入trie。插入前先看字首是否存在。如果存在,就共享,否則建立對應的節點和邊。比如要插入單詞add,就有下面幾步:

考察字首"a",發現邊a已經存在。於是順著邊a走到節點a。

考察剩下的字串"dd"的字首"d",發現從節點a出發,已經有邊d存在。於是順著邊d走到節點ad。

考察最後乙個字元"d",這下從節點ad出發沒有邊d了,於是建立節點ad的子節點add,並把邊ad->add標記為d。

應用字首樹還是很好理解,它的應用也是非常廣的。

(1)字串的快速檢索

字典樹的查詢時間複雜度是o(l

ogl)

o(logl)

o(logl

)

Trie 字首樹 字典樹 單詞查詢樹(資料結構)

在寫完了kmp演算法的部落格之後,我下定決心,一定要寫出一篇關於 ac自動機的部落格 ac自動機實際上就是字典樹上的kmp演算法。所以,考慮到廣大同學不一定會寫trie樹,特此在此處寫了一篇文章介紹介紹這種資料結構。字典樹 又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用...

Trie樹,又稱單詞查詢樹 字典

答案 trie樹,又稱單詞查詢樹 字典樹,是一種樹形結構,是一種雜湊樹的變種,是 一種用於快速檢索的多叉樹結構。典型應用是用於統計和排序大量的字串 但不僅限於字 符串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 最大限度地減少無謂的 字串比較,查詢效率比雜湊表高。trie樹的核心思想是空間換...

資料結構 Trie(單詞查詢樹,字典樹,字首樹)

trie,又稱字首樹或字典樹,是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。與二叉查詢樹不同,鍵不是直接儲存在節點中,而是由節點在樹中的位置決定。乙個節點的所有子孫都有相同的字首,也就是這個節點對應的字串,而根節點對應空字串。一般情況下,不是所有的節點都有對應的值,只有葉子節點和部分內部節點所...