字典樹 (trie)
用於儲存字串。樹的每條邊恰好表示乙個字元,每個節點代表從根到該節點的路徑所對應的字串。
簡介與操作實現可見藍書p82~83。
trie字典樹很好地利用了字首,節省了很多空間。
1操作實現的核心**//先說明一下:本**段的字串d的下標都是從1開始
2 inline void insert(char *d)//
向trie樹插入字串d
312 ed[now]=1;//
最後標明一下字串結尾節點,說明該節點代表了乙個已插入過的字串 13}
1415 inline int fin(char *d)從trie樹查詢字串d
1625
return ed[now];//
查詢到最後還要看當前節點是否代表乙個插入過tire樹的字串
26 }
應用:1、字首查詢。
在trie樹中查詢乙個字串的字首。不管trie樹中插入了多少個字串,查詢的複雜度都是優秀的o(n)(n為當前字串的長度)。
還有一種邊插邊找字首的方法。如果當前串插入trie樹時沒有新建任何節點,那它就是它的末尾節點的子樹中所有串的字首;如果當前串插入trie樹時經過了某個串x的末尾節點,那麼x就是當前串的乙個字首。
2、異或相關。
將每個數看做二進位制的01串。從trie樹中找當前數字異或值最大的數,只要盡可能向與當前邊反方向的邊走就好。
1 inline int fin(int a)//相關**從trie樹中找與a異或的結果最大的數,並返回這個結果2//
a為int範圍的乙個正整數 316
else
//沒有的話,有哪條邊,就走那條邊嘍。
17//
trie樹中至少有乙個數的話,一定能一直走下去
18 now=tree[now][c^1
];19}20
return
ret;
21 }
Trie字典樹 模板整理
首先附上學習字典樹參考的部落格鏈結 字典樹,又稱單詞查詢樹,trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字元 串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊...
Trie樹(字典樹)
trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...
字典樹 Trie樹
字典樹 trie樹 顧名思義是一種樹形結構,屬於雜湊樹的一種。應用於統計 排序 查詢單詞 統計單詞出現的頻率等。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。字典樹的結構特點 根節點不代表任何字元。其他節點從當前節點回溯到根節點可以得到它代表的字串。...