字典樹的實現

2021-10-24 16:38:16 字數 1703 閱讀 6988

字典樹的實現

字典樹又稱為字首樹或者trie樹,是處理字串常用的資料結構。假設組成所有單詞的字元僅是『a』~『z』,請實現字典樹的結構,幷包含以下四個主要的功能。void insert(string word):新增word,可重複新增;void delete(string word):刪除word,如果word新增過多次,僅刪除一次;boolean search(string word):查詢word是否在字典樹**現過(完整的出現過,字首式不算);int prefixnumber(string pre):返回以字串pre作為字首的單詞數量。現在給定乙個m,表示有m次操作,每次操作都為以上四種操作之一。每次操作會給定乙個整數op和乙個字串word,op代表乙個操作碼,如果op為1,則代表新增word,op為2則代表刪除word,op為3則代表查詢word是否在字典樹中,op為4代表返回以word為字首的單詞數量(資料保證不會刪除不存在的word)。

輸入描述:

輸入包含多行,第一行乙個整數m(1≤

m≤10

5)

(1\leq m\leq 10^5)

(1≤m≤1

05),代表操作次數。接下來m行,每行包含乙個整數op(1≤

op≤4

)(1 \leq op \leq 4)

(1≤op≤

4)和乙個字串word(1≤

leng

thwo

rd≤20

)(1 \leq length_ \leq 20)

(1≤len

gthw

ord​

≤20)

。輸出描述:

對於每次操作,如果op為3時,如果word在字典樹中,請輸出「yes」,否則輸出「no」;如果op為4時,請輸出返回以word為字首的單詞數量,其它情況不輸出。

示例1輸入

7

1 qwer

1 qwe

3 qwer

4 q2 qwer

3 qwer

4 q

輸出
yes2no

1

題解:

字典樹的模板題。關於字典樹的定義不做介紹。本題我們需要記錄有多少個單詞共用某個節點,以及多少個單詞以某個節點結尾。我習慣性使用二維陣列表示 trie 樹,就是開闢的空間較大。

**:

#include

using

namespace std;

const

int n =

2000010

;int trie[n][26

];int path[n]

;int num[n]

;int idx;

void

insert

(char

*s )

++num[p];}

bool

search

(char

*s )

return num[p]!=0

;}void

_delete

(char

*s )

p = t;

}--num[p];}

intprefixnumber

(char

*s )

return path[p];}

intmain

(void

)return0;

}

字典樹的實現

最近對字典樹來了興趣,心血來潮,把 敲了 下面是對字典樹的大體解釋 字典樹是一種樹形結構,是一種雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串 但不僅限於字串 所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表...

字典樹實現

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

Trie樹(字典樹)的實現

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