介紹Trie樹的性質和構造方法。
最終用來統計一片文章各個單詞出現的頻率。node
最終結果:git
Trie樹是一種數據結構,對於詞頻統計,文本檢索很是有效。
Trie樹的大小取決與要統計的文本的字母個數。好比只統計26個英文字母的話,單詞最大長度爲10的話,佔用的空間最可能是26^10。但實際上並無這麼恐怖。由於沒有abc這樣的單詞。數據結構
在Trie中,將沒一個字母做爲一個node,其中含有幾個信息spa
c#define R 26 typedef struct node { int value;// ASCII碼 int frequecy;//c出現的頻率 struct node* child[R];//有R個孩子,初始爲NULL }Node;
下面用hello這個單詞舉例子。
第一個節點是h,且h有一個孩子l。日後相似。到了最後的o,此時纔是一個真正的單詞,因此o的frequecy爲1.
創建Trie樹的時候,每次都是從Root出發,當再次遇到單詞hello時,仍是順着這條路走下來,到o的時候將frequecy=2。
若是碰到的單詞是helloworld,則插入後的結果爲
能夠看到,frequency>0
的節點,說明從root到這個節點的路徑上的全部字母節點構成了一個單詞,且單詞出現的頻率就是frequecy。.net
因此,樹的高度與文本中的單詞的最大長度有關,但實際上最長的單詞也沒幾個字母……尤爲是當不一樣的單詞具備相同前綴的時候,前綴的路徑是共用的。利用這個性質,Trie在前綴搜索上變現也不錯。code
當拿到一個文本文檔時,咱們能夠經過一遍掃描將trie創建,經過遍歷trie獲得全部詞出現的頻率。blog