字典樹小結

2021-07-27 13:20:00 字數 1450 閱讀 6233

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

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

字典樹的插入,刪除和查詢都非常簡單,用乙個一重迴圈即可。

1. 從根節點開始一次搜尋

4. 迭代過程

...字典樹的應用

1.字典樹在串的快速檢索中的應用。

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

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

2. 字典樹在「串

」排序方面的應用

給定n個互不相同的僅由乙個單詞構成的英文名,讓你將他們按字典序從小到大輸出

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

3. 字典樹在最長公共字首問題的應用

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

/*裸的字典樹應用,自己慢慢體會,注意記憶體的分配,一不小心就會re或mle*/

#define mann 1000010

#define inf 0x3f3f3f3f

typedef long long ll;

struct node

;struct node *root;

node *build()

void insert(char s)

}int query(char s)

return p->num;

}int main()

while(~scanf("%s",s))

}/*陣列實現*/

#define mann 1000005

#define inf 0x3f3f3f3f

typedef long long ll;

int ch[mann][27];

int val[mann];

int node;

void add(char s)

{ int u=0,len=strlen(s),c;

for(int i=0; i

這裡有一些字典樹入門的經典體型

做每道題都應該多想想,總結出自己的模板,這樣才會有更大的進步

字典樹(小結)

0.1 字典樹 功能 在陣列中找與乙個數異或值最大的元素。支援新增,刪除操作,查詢操作。例如 hdu4825 include include include include include include include include include include include using n...

字典樹小結

我理解的字典樹 儲存字串 或數字 能快速找到與之匹配的或者與之有某種關係的串。普通字典樹 解決匹配問題,01字典樹解決異或問題 模板 1.普通字典樹 tree i j 表示i標號的節點的第j個孩子 sum i i標號的節點經過了幾次。flag i i標號的節點是否是某個字串的最後乙個點。int tr...

01字典樹 小結

為了做13年南京網路賽的一道題 學了這個01字典樹 看了別人的模板 之後切了幾道水題 現在總結一下 01字典樹的實現可以看成是把乙個數的二進位制字元化後插入到一顆一般的字典樹中 比如在01字典樹種插入3時 相當於在字典樹中插入00 00011 一共33為,這個根據具體實現不同 查詢最大異或值的時候我...