在詞典中查詢某個單詞時,例如:boy,我們會先找到 『b』,然後找到 『o』,最後找到 『y』。這個過程的時間複雜度是 o(m),m 為單詞的長度。
字典樹是模擬這個過程的資料結構,十分高效。例如儲存 do,dog,boy,bob,結構如下:
可以看見,公共字首僅儲存了一遍 ,字典樹在空間上的效率也很高。但若用本身的結構來儲存仍然會占用大量空間,用陣列來儲存字典樹可以以非常緊湊的方式節約大量空間。
int pos =1;
int trie[
1000010][
26];//儲存下乙個字元的位置
int num[
1000010];
//以此為字首的單詞的數量
//bool tail[1000010]; 標記某個字元是否為單詞結尾
void
insert
(char str)
p = trie[p]
[n];
num[p]++;
//根據需要打上標記
//if(!str[i + 1])}}
intfind
(char str)
p = trie[p]
[n];
}return num[p]
;}
FIFO實現 陣列方式
檔案 config.h ifndef config h define config h ifndef true define true 1 endif ifndef false define false 0 endif typedef unsigned char uint8 typedef sign...
Trie字典樹陣列實現
include using namespace std const int n 10010 int son n 26 儲存下乙個字元的行 int count n 這個單詞單詞有多少個 int pos 當前新分配的儲存位置 char szstr n 讀取字串 void stringinsert con...
Python Trie樹 字典樹 的實現方式
今天學習到了trie樹 字典樹的詳細定義可以看 how to create a trie in python class trie def init self self.end end defmake trie self,words root dict for word in words curre...