字典樹,又名trie樹。顧名思義,在字典中很好用。我們在查牛津詞典時都是先按第乙個字母找到以這個字母為首的單詞所在的初始位置,在此位置的基礎上,再按照第二個字母繼續找。。。
插一句,字串的字典序也是這個意思,先按照第乙個字母排序,第乙個字母相同的情況下再按照第二個字母排序。
字典樹的資料結構圖:
注意:節點中的value並不儲存字元,節點中的value按需使用。每個節點中的next陣列儲存26(如果只有小寫字母的話)個next節點的位址。
某個字串在一堆字串中出現的次數,或者一堆字串中含有某個字首的字串的個數。
#include
#include
using namespace std;
//表示next陣列的長度,表示26個字母。如果字串中有其他字元的話,應相應調整。
//如果所有的字串都是手機號的話,那就是10了
const int max_num = 26;
struct trienode;
trienode* createtrienode()
void inserttrietree(trienode **root, string str)
else
p = *root;
int len = str.length();
int k;
for(int i = 0; i < len; i++)
}int searchtrietree(trienode **root, string str)
return p->i;
}int main()
還有乙個例子 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新...