Trie樹介紹與動態構造 HDU1251

2021-07-15 20:42:26 字數 2327 閱讀 7483

trie樹介紹:

trie樹,稱為單詞字首樹,字典樹,是一種用於快速檢索的多叉樹結構

核心思想:

空間換時間,利用字串的公共字首來最大限度地減少無所謂的字串比較,從而降低時間複雜度。

基本性質:

1.根節點不包含字元,除根節點外的每條邊對應乙個字元

2.從根節點到某乙個節點,將邊上的字元連起來,會得到該節點對應的字首

3.每個節點對應的字首都不相同

trie樹的程式設計實現

1.trie樹節點的定義:

struct trie

};trie *root=new trie;

說明:

count:使用到該節點的字首的單詞數量

trie():建構函式,將節點中的count的數量和childs陣列初始化

trie *root = new trie :使用new動態分配乙個儲存空間,並讓root指向該空間

2.trie樹的插入:

void insert(char *str)

else

}current->last = true ;

}

說明:

假設存在字串str,trie樹的根結點為root。i=0,current=root。

1)取str[i],判斷current->childs[str[i]-『a』]是否為空,

若為空:

則建立結點newnode,並將current->childs[str[i]-『a』]指向newnode,然後current指向newnode;

若不為空:

則current=current->childs[str[i]-『a』];

2)i++,繼續取str[i],迴圈1)中的操作,直到遇到結束符』\0』,此時將當前結點current中的 last置為true。

3.trie樹的查詢:

查詢某個字首的使用次數:

int search(char *str)

return current->count;

}

說明:

假設要查詢的字串為str,trie樹的根結點為root,i=0,current=root

1)取str[i],判斷判斷current->childs[str[i]-『a』]

是否為空,若為空,則返回0;

若不為空,則繼續取字元。

2)重複1)中的操作直到遇到結束符』\0』,若當前結點current不為空,則返回current->count。

查詢某個單詞是否存在:

int search(char *str)

if(current -> last)

return

true;

return

false;

}

4.trie的刪除

注意:動態trie樹一定要釋放記憶體!

void deltrie(trie *t)

delete t ;

}

說明:

從根節點開始不斷進入當前節點的子節點,直到走到葉子節點,並釋放當前空間

hdu1251

題意:

先給出幾個單詞,之後給出幾個字首,查詢那些單詞中這些字首分別出現過多少次

題解:

簡單的trie樹的應用

**:

#include

#include

#include

#include

using namespace std;

struct node

};node *root=new node;

node *current,*newnode;

void insert(char *str)

else

}}int search(char *str)

return current->count;

}int main()

Trie樹(字典樹)HDU 1251

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

Trie樹(字首樹 字典樹)的介紹與實現方法

3.trie的典型應用 4.trie樹的實現 leetcode208 trie樹是一種多叉樹,具有以下性質 因此可以發現,字首樹把字串儲存在數的遍歷路徑上,而非節點上。擁有相同字首的字串對應的遍歷字首路徑相同,這樣在業務中涉及大量擁有相同字首的字串時可以大量復用空間,節省開銷。by the way,...

trie樹 字典樹 介紹及簡單實現

第一次接觸trie樹,翻了一些演算法樹竟然沒有找到。於是在google上各種查詢,現在對自己所了解的trie總結一下,以便將來複習,並給出簡單的實現。trie,又稱字典樹 單詞查詢樹,是一種樹形結構,用於儲存大量的字串。它的優點是 利用字串的公共字首來節約儲存空間。相對來說,trie樹是一種比較簡單...