字典樹應用

2021-06-28 22:49:40 字數 1905 閱讀 6037

trie,又稱字典樹、單詞查詢樹,是一種樹形結構,用於儲存大量的字串。它的優點是:利用字串的公共字首來節約儲存空間。

相對來說,trie樹是一種比較簡單的資料結構.理解起來比較簡單,正所謂簡單的東西也得付出代價.故trie樹也有它的缺點,trie樹的記憶體消耗非常大.當然,或許用左兒子右兄弟的方法建樹的話,可能會好點.

其基本性質可以歸納為:

1. 根節點不包含字元,除根節點外每乙個節點都只包含乙個字元。 

2. 從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串。 

3. 每個節點的所有子節點包含的字元都不相同。

其基本操作有:查詢 插入和刪除,當然刪除操作比較少見.我在這裡只是實現了對整個樹的刪除操作,至於單個word的刪除操作也很簡單.

搜尋字典專案的方法為:

(1) 從根結點開始一次搜尋;

其他操作類似處理

有乙個存放英文單詞的文字檔案,現在需要知道某些給定的單詞是否在該檔案中存在,若存在,它又出現了多少次?

這樣的問題解法有多種,普通青年直接暴力查詢,稍文藝點的用map。順序查詢的話,每給定乙個單詞就得遍歷整個字串陣列,時間開銷實在太大;如果將所有的單詞都存放在乙個map中,每次查詢的時間複雜度則降為o(log(n))。不得不說,對於一般的應用場景,map足夠滿足所有需求。

但對於這個問題,還有更好的方法。有一種資料結構似乎就是為解決此類問題而誕生的,它就是字典樹。我們知道,英文單詞有很多都有相同的字首,對於相同的字首,字典樹只儲存一次,而map則是有多少個單詞就儲存多少次,所以在這個問題中,字典樹比map省空間;在字典樹中查詢字串的時間複雜度只跟樹的深度有關而跟究竟有多少個字串無關,而樹的深度只跟字串的長度有關,超過30個拉丁字母的英文單詞基本沒有,所以在該問題中查詢字串的時間複雜度只有o(1),比map省時間。

所以對於這樣乙個特定的問題,字典樹自然是最佳的選擇

一道變形的字典樹問題,只需要在構建字典樹的結尾加上乙個對應的翻譯字串。

這裡還要特別注意,結尾v一定最後賦值為-1,用來表示結束.

因為假如有abcde這個模式串的話,再出現ab的話就不知道了。

這道題目還可以用map做的,但是map用時比字典樹大多了。

#include using namespace std;

#define n 26

typedef struct trie

trie;

void create_trie(trie **proot)

void insert(trie *root,char *s,char *source)

else

}p_current->v = -1; //表示乙個結束,若有字尾則會一直遞推下去

strcpy(p_current->x,source);

}bool find(trie *root ,char *s)

if(p->v == -1)

return false;

}void destroy_trie(trie *proot) //遞迴釋放空間 ,在用指標就可釋放,但是函式申請必須傳遞指標的指標

delete proot;

proot = null ;

}int main()

scanf("%s",xh);

getchar();

while (gets(a)&& strcmp(a,"end"))

int k =0;

while(isalpha(a[i]))

i--; //避免在for迴圈重複+1

xh[k] = 0;

if(find(root,xh) == false)

printf("%s",xh);

}printf("\n");

}destroy_trie(root);

return 0;

}

字典樹的應用

論吹牛,學弟一點也不輸個學長。為了找到自己的存在感,學弟又和學長在比誰前女友多,於是2個人撕逼開始了,學弟說我在大一的時候談了a個女朋友,學長說那是我乙個星期的 數量,我大一的時候談了ab個女朋友,學弟又說加上高中的我談了abc個女友,學長再次 不服,加上高中我談了abcdf個女朋友 想必大家已經明...

字典樹的應用

又稱單詞查詢樹,trie樹 是一種 樹形結構 是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比 雜湊表高。定義 1 typedef struct...

字典樹及其應用

字典樹是一種比較特殊的樹,邊上有邊權 至少我是怎麼理解的 又名 trie 樹。大概長這樣 插入了cap,cat,csp,co,code 邊上是字符集,點上是點的編號,塗成藍色的代表是單詞的結尾。字符集可以是a z,0 9,true和false等等。字典樹有效的組織了單詞的關係,節省了時間和空間。vo...