Trie 樹基礎入門

2021-09-25 19:31:26 字數 1841 閱讀 1763

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

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

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

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

以英文單詞構建的字典樹為例,這棵 trie 樹中每個結點包括 26 個孩子結點,因為總共有 26 個英文本母(假設單詞都是小寫字母組成)。則可宣告包含 trie 樹的結點資訊的結構體:

typedef struct trienode

trienode,*trie;

其中 count 為該單詞字首出現的次數,next 是乙個指標陣列,存放著指向各個孩子結點的指標,exist 表示該結點位置是否構成乙個單詞。

有關 trie 樹的基本操作有插入、查詢和刪除。以統計單詞字首出現的次數為例。

1、插入

假設存在字串 word,trie 樹的根結點為 root。p=word,node=root。

1)當 p 不為空時,判斷 node->next[*p-『a』] 是否為空,若為空,則建立結點 temp,並將 node->next[*p-『a』] 指向 temp,然後 node 指向 node->next[*p-『a』];若不為空,則直接將 node 指向 node->next[*p-『a』]。

2)將 p 指標後移,node->count+=1,重複1)操作,直到 p 為空,將 node->exist 設為 true。

2、查詢

假設要查詢的字串為 word,trie 樹的根結點為 root。p=word,node=root。

1)當 p 不為空時,判斷 node->next[*p-『a』] 是否為空,若為空,則返回 0;若不為空,則 node=node->next[*p-『a』]。

2)將 p 指標後移,若當前結點 node 不為空並且 exist 為 true,則返回 node->count。

3、刪除

刪除操作與插入操作類似,但在刪除前需要先判斷該單詞是否存在。

#include #include #include #include #include using namespace std;

typedef struct trienode

trienode,*trie;

trienode* createtrienode()

void trieinsert(trie root,char* word)

node->exist=true;

}int triedelete(trie root,char* word)

if(node->exist==false) return 0;

node=root;

p=word;

while(*p)

node->exist=false;

return 1;

}int triesearch(trie root,char* word)

return node->count;

}int main()

}return 0;

}

trie 樹的強大之處就在於它的時間複雜度。它的插入和查詢時間複雜度都為 o(k),其中 k 為 key 的長度,與 trie 樹中儲存了多少個元素無關。trie 樹的空間消耗很大,其中心思想就是空間換時間。

本篇文章僅是本人在學習 trie 樹過程中的一些基礎知識總結,如果有什麼錯漏的地方,敬請諒解。

參考文章:

字典樹 Trie 入門篇

字典樹 trie 字典樹 又稱字首樹 給出字串集合 code cook five file fat,我們設根節點為空節點,那麼其trie樹如下所示 字典樹又稱字首樹,給出乙個字串集合,我們可以通過公共字首將整個字串集合存到乙個樹形結構中,一旦形成了集合中的字串,我們只需在樹上的相應節點打上標記 儲存...

hdu 1247 trie樹入門題

題目 題意 給你一些單詞,輸出是由兩個其他的單詞組成的單詞。分析 trie樹的入門題,很簡單,這題的資料很水,每個單詞的長度不會超過26.include include includeusing namespace std const int n 50005 char word n 27 struc...

字典 trie 樹 從入門到入土

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