前言:tire樹,又稱之為字典樹或者單詞查詢樹。是一種樹形結構,是雜湊樹的變種。典型應用是用於統計、排序或儲存大量的字串(不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻的統計。因為相同的字串字首會共享同一條分支,所以優點是可以利用不同字串的相同字首來減少無謂的字串比較,查詢效率比hash表/hash樹高。
有三個基本的性質:
1.除了根節點以外,每個節點都包含乙個字元;
2.從根節點到當前節點路徑上的字元連線起來組成該節點對應的字串;
3.每個節點的所有子節點所包含的字元是不相同的。
說了這麼多,是時候開始給出資料結構和演算法描述了:
#define maxnum 26
typedef struct trienode
if (pcur->isword==true)
return true;
return false;
}
查詢演算法的時間複雜度為o(strlen(pword)),即與單詞的長度成正比;
void inserttrienode(trieroot proot,char *pword)
pcur=pcur->child[id];
pword++;
}pcur->isword=true;
}
插入操作與查詢操作類似,只是在查詢不成功的時候要建立新的節點,最後更新pcur的isword標識。時間複雜度同樣是o(strlen(pword));
注意乙個問題,trie樹的最大高度是所有單詞的最大長度。所以查詢操作的最大時間複雜度為trie樹的高度。建立trie樹的過程和插入是同時的,這一點和隨機建立二叉搜尋樹是一樣的,就是進行不斷地插入操作。
void createtrie(trieroot proot,vectordataset)
}
tire樹的常見應用集錦:
事先將已知的一些字串(字典)的有關資訊儲存到trie樹里,查詢另外一些未知字串是否出現過或者出現頻率。
最長公共字首問題:給定n個字串,求兩個串的最長公共字首;兩個字串的最長公共字首的長度即由根節點到最近公共祖先節點路徑上字元的個數。
給出n 個小寫英文本母串,以及q 個詢問,即詢問某兩個串的最長公共字首的長度是多少. 解決方案:
首先對所有的串建立其對應的字母樹。此時發現,對於兩個串的最長公共字首的長度即它們所在結點的公共祖先個數,於是,問題就轉化為了離線 (offline)的最近公共祖先(least common ancestor,簡稱lca)問題。
而最近公共祖先問題同樣是乙個經典問題,可以用下面幾種方法:
(1)利用並查集(disjoint set),可以採用採用經典的tarjan 演算法;
(2)求出字母樹的尤拉序列(euler sequence )後,就可以轉為經典的最小值查詢(range minimum query,簡稱rmq)問題了;
給出n個單詞組成的熟詞表,以及一篇全用小寫英文書寫的文章,請你按最早出現的順序寫出所有不在熟詞表中的生詞。思路:將n個單詞的熟詞表建立一棵tire樹,對於文章中的每個單詞,查詢其在tire樹中是否存在。
實現對映,比如同乙個東西有兩種表示方法a和b,現在給你了a,讓你轉換成b。最容易想到的是hash,用trie樹實現也是比較簡單的,可以在trie資料結構中新增一項string data_b;這樣如果isword=true,訪問data_b即可獲取方法b的表示。
有乙個1g大小的乙個檔案,裡面每一行是乙個詞,詞的大小不超過16位元組,記憶體限制大小是1m。返回頻數最高的100個詞。
給出乙個詞典,其中的單詞為不良單詞。單詞均為小寫字母。再給出一段文字,文字的每一行也由小寫字母構成。判斷文字中是否含有任何不良單詞。例如,若rob是不良單詞,那麼文字problem含有不良單詞。
1000萬字串,其中有些是重複的,需要把重複的全部去掉,保留沒有重複的字串
Trie 單詞查詢樹
l 簡介 trie 又稱單詞查詢樹 字首樹,是一種雜湊樹的變種。應用於字串的統計與排序,經常被搜尋引擎系統用於文字詞頻統計。含有單詞 tea tree a zsu 的一棵trie l性質 n根節點不包含字元,除根節點外的每乙個節點都只包含乙個字元。n從根節點到某一節點,路徑上經過的字元連線起來,為該...
Trie 單詞查詢樹
l 簡介 trie 又稱單詞查詢樹 字首樹,是一種雜湊樹的變種。應用於字串的統計與排序,經常被搜尋引擎系統用於文字詞頻統計。含有單詞 tea tree a zsu 的一棵trie l性質n 根節點不包含字元,除根節點外的每乙個節點都只包含乙個字元。n 從根節點到某一節點,路徑上經過的字元連線起來,為...
C語言 單詞查詢樹 Trie樹
trie樹,是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊樹高。對於下圖的trie樹,總共有4個單詞,abc,ad,efa...