字典樹(trie 樹)
字典樹(trie樹)
字典樹是一種在字串查詢,字首匹配等方面應用廣泛的演算法,它在查詢字串時只與被查詢的字串長度有關,所以它在查詢時只有o(1)的時間複雜度,但隨之而來的較大的空間複雜度。
一.原理分析
二.分步實現
1.trie樹結構體定義
1 struct node
2 12 ~node()
13
21 }
22 }
23 };
24 node *head;
ps:被注釋掉部分是用建構函式初始化節點與使用析構函式刪除節點。
上圖**中的next[26]表示每個節點的下一層節點數量,小寫字母為26,加上大寫就是52,加上數字就是62,以此類推。而bool型的k則表示該位置是否有終止標記,可根據題意改變為其他標記。
2.字典樹的插入
1 void insert_ch(char *ch)
2 11 p -> k = true; //進行字串結尾標記
12 }
每次從根節點進行插入,如果向下的節點已經存在,就直接讀取,否則拓展乙個新節點。之後將最後乙個節點的k標記為true表示該位置有乙個字串結尾。
3.字串查詢
1 bool find_ch(char *ch)
2 11 return p -> k;
12 }
基本過程與插入相同,向下查詢,入過該節點不存在,直接返回false,如果存在一直向下查詢,最終返回末尾標記的k。
1.模板**
1 #include2 #include3 #include4 #include5 #include6 using namespace std;
7 struct node
8 19 }
20 ~node()
21
28 29 }
30 };
31 node *head;
32 void insert_ch(char *ch)
33 42 p -> k = true;
43 }
44 bool find_ch(char *ch)
45 54 return p -> k;
55 }
56 char ch[100];
57 int main()
58
三.另一種實現方式
動態分配記憶體對空間掌控很好,用乙個節點開闢乙個節點,但是在做題中有時會出現大大小小的問題不好結決,所以可以選擇另一種方法,直接開闢出乙個很大的結構體陣列用來儲存節點,不用考慮開闢與刪除節點問題。
1 #include2 #include3 #include4 #include5 #include6 using namespace std;
7 struct node
8 ;12 node no[10000000],*head;
13 int iii;
14 node *new_node()
15 22 p -> k = false;
23 }
24 void insert_ch(char *ch)
25 35 p = p->next[ch[i]-'a'];
36 }
37 p -> k = true;
38 }
39 bool find_ch(char ch)
40 49 return p -> k;
50 }
51 int main()
52 {
53 char s[100];
54 int i,n;
55 head = new_node();
56 while(~scanf("%d",&n))
57 {
58 iii=0;
59 for(i=0;i這種方法與上面的基本相同,只是節點不在用new開闢,而是直接從結構體陣列中取用,這種方法的弊端節點有最大值,當需要儲存的資料量過大時,會陣列越界。儲存資料量小時對空間的浪費也很嚴重。
四.相關基礎題目
hdoj 1251 統計難題:
hdoj 1671 phone list:
//用第一種方法記得釋放空間,否則超記憶體
hdoj 1247 hat』s words:
Trie樹(字典樹)
trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...
字典樹 Trie樹
字典樹 trie樹 顧名思義是一種樹形結構,屬於雜湊樹的一種。應用於統計 排序 查詢單詞 統計單詞出現的頻率等。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。字典樹的結構特點 根節點不代表任何字元。其他節點從當前節點回溯到根節點可以得到它代表的字串。...
字典樹 trie樹
amy 56 ann 15 emma 30 rob 27 roger 52首先存入amy,level 0表示根,不持有資料。其餘每個節點持有乙個字元 葉子節點持有資料,且持有的字元為 0 level 0 root a level 1 m level 2 y level 3 0 56 level 4新...