字典樹(模板 總結)

2021-07-15 18:26:43 字數 3586 閱讀 2214

編輯又稱單詞查詢樹,

trie樹,是一種

樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的

字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比

雜湊樹高。

它有3個基本性質:

根節點不包含字元,除根節點外每乙個節點都只包含乙個字元; 從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串; 每個節點的所有子節點包含的字元都不相同。

其基本操作有:

查詢、插入和刪除,當然刪除操作比較少見。

搜尋字典專案的方法為:

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

(4) 迭代過程……

其他操作類似處理

給出n個單詞組成的熟詞表,以及一篇全用小寫英文書寫的文章,請你按最早出現的順序寫出所有不在熟詞表中的生詞。

在這道題中,我們可以用

陣列列舉,用雜湊,用字典樹,先把熟詞建一棵樹,然後讀入文章進行比較,這種方法效率是比較高的。

給定n個互不相同的僅由乙個單詞構成的英文名,讓你將他們按

字典序從小到大輸出

用字典樹進行排序,採用

陣列的方式建立字典樹,這棵樹的每個結點的所有兒子很顯然地按照其字母大小排序。對這棵樹進行先序遍歷即可。

對所有串建立字典樹,對於兩個串的最長公共字首的長度即他們所在的結點的公共祖先個數,於是,問題就轉化為當時公共祖先問題。

trie樹的基本實現

字母樹的插入(insert)、刪除( delete)和查詢(find)都非常簡單,用乙個一重迴圈即可,即第i 次迴圈找到前i 個字母所對應的子樹,然後進行相應的操作。實現這棵字母樹,我們用最常見的陣列儲存(靜態開闢記憶體)即可,當然也可以開動態的指標型別(動態開闢記憶體)。至於結點對兒子的指向,一般有三種方法:

1、對每個結點開乙個字母集大小的陣列,對應的下標是兒子所表示的字母,內容則是這個兒子對應在大陣列上的位置,即標號;

2、對每個結點掛乙個鍊錶,按一定順序記錄每個兒子是誰;

3、使用左兒子右兄弟表示法記錄這棵樹。

三種方法,各有特點。第一種易實現,但實際的空間要求較大;第二種,較易實現,空間要求相對較小,但比較費時;第三種,空間要求最小,但相對費時且不易寫。

這裡採用第一種,速度較快,適合acm競賽。

max 為自定義的。根據實際情況。這是只要考慮小寫字母 a-z

01

02

03#include

04#include

05usingnamespacestd;

06#define  max    26

07

08typedefstructtrienode

09trienode;

13

14trienode memory[1000000];//先分配好記憶體。 malloc 較為費時

15intallocp = 0;

16

17//初始化乙個節點。ncount計數為1, next都為null

18trienode * createtrienode()

19

26

27voidinserttrie(trienode * * proot,char* str)

28

39else

40

43

44tmp = tmp->next[k];

45i++;//移到下乙個字元

46}

47

48}

49

50intsearchtrie(trienode * root,char* str)

51

63else

64return0;

65i++;

66}

67returntmp->ncount;//返回最後的那個字元  所在節點的 ncount

68}

69

70intmain(void)

71

78

79while(gets(s))//查詢輸入的字串

80

83

84return0;

85}

trie樹學習總結(字典樹模板)

trie樹 演算法簡介 字典樹,也叫trie樹,是一種比較實用的資料結構,無論是在acm競賽的題目中,還是字串相關的某些實際應用領域內,它都能發揮巨大的作用。首先來看看字典樹的本質是什麼。它其實是一棵儲存了很多字串的樹,這棵樹上的每一條邊就是某個或某些字串中的乙個字元,而從根節點到某乙個特定節點所經...

字典樹模板

字典樹,又稱單詞查詢樹,trie樹,是一種樹形結構,典型應用是用於統計,排序和儲存大量的字串,所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來節約儲存空間,最大限度的減少無謂的字串比較,查詢效率比雜湊表高。字典樹的應用 字串的快速檢索 雜湊最長公共字首 include usi...

字典樹模板

package template public class triemod trie root new trie for string s str if find root,asdf else public static void insert final trie root,string str ...