zz 字典樹原理 字典樹(講解 模版)

2022-08-31 00:48:21 字數 1886 閱讀 9941

怕以後還要用到 就先轉了~

from  字典樹原理

trie樹就是字典樹,其核心思想就是空間換時間。

舉個簡單的例子。

給你100000個長度不超過10的單詞。對於每乙個單詞,我們要判斷他出沒出現過,如果出現了,第一次出現第幾個位置。

這題當然可以用hash來,但是我要介紹的是trie樹。在某些方面它的用途更大。比如說對於某乙個單詞,我要詢問它的字首是否出現過。這樣hash就不好搞了,而用trie還是很簡單。

現在回到例子中,如果我們用最傻的方法,對於每乙個單詞,我們都要去查詢它前面的單詞中是否有它。那麼這個演算法的複雜度就是o(n^2)。顯然對於100000的範圍難以接受。現在我們換個思路想。假設我要查詢的單詞是abcd,那麼在他前面的單詞中,以b,c,d,f之類開頭的我顯然不必考慮。而只要找以a開頭的中是否存在abcd就可以了。同樣的,在以a開頭中的單詞中,我們只要考慮以b作為第二個字母的……這樣乙個樹的模型就漸漸清晰了……

假設有b,abc,abd,bcd,abcd,efg,hii這6個單詞,我們構建的樹就是這樣的。

對於每乙個節點,從根遍歷到他的過程就是乙個單詞,如果這個節點被標記為紅色,就表示這個單詞存在,否則不存在。

那麼,對於乙個單詞,我只要順著他從跟走到對應的節點,再看這個節點是否被標記為紅色就可以知道它是否出現過了。把這個節點標記為紅色,就相當於插入了這個單詞。

這樣一來我們詢問和插入可以一起完成,所用時間僅僅為單詞長度,在這乙個樣例,便是10。

我們可以看到,trie樹每一層的節點數是26^i級別的。所以為了節省空間。我們用動態鍊錶,或者用陣列來模擬動態。空間的花費,不會超過單詞數×單詞長度。

from  tanky woo的程式人生

又稱單詞查詢樹trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。 

字典樹與字典很相似,當你要查乙個單詞是不是在字典樹中,首先看單詞的第乙個字母是不是在字典的第一層,如果不在,說明字典樹里沒有該單詞,如果在就在該字母的孩子節點裡找是不是有單詞的第二個字母,沒有說明沒有該單詞,有的話用同樣的方法繼續查詢.字典樹不僅可以用來儲存字母,也可以儲存數字等其它資料。

trie的資料結構定義:

#define

max 26

typedef 

struct

trie   

;   

trie 

*root;

next是表示每層有多少種類的數,如果只是小寫字母,則26即可,若改為大小寫字母,則是52,若再加上數字,則是62了,這裡根據題意來確定。

v可以表示乙個字典樹到此有多少相同字首的數目,這裡根據需要應當學會自由變化。

trie的查詢(最主要的操作):這裡給出生成字典樹和查詢的模版

生成字典樹:

void

createtrie(

char

*str)

else}p

->v =

-1;   

//若為結尾,則將v改成-1表示

}接下來是查詢的過程了:

intfindtrie(

char

*str)

return-1

;   

//此串是字符集中某串的字首

}對於上述動態字典樹,有時會超記憶體,比如 hdoj 1671 phone list,這是就要記得釋放空間了:

intdealtrie(trie*t)

free(t);

return0;

}

字典樹(講解 模版)

又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。字典樹與字典很相似,當你要查乙個單詞是不是...

Trie樹(字典樹)講解

先聊一聊字典樹是什麼,他有什麼用 字典樹,又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊樹高。...

Tree字典樹講解

就像樹根一樣,每個點就是節點,也像乙個網狀鍊錶。優點 對於字串可以減少無所謂的比較,效率很高。多說無益,上例題 ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第...