Mysql字首樹 Trie 字首樹 字典樹 詳解

2021-10-20 22:59:44 字數 1333 閱讀 8641

1、字典樹的概念

字典樹,因為它的搜尋快捷的特性被單詞搜尋系統使用,故又稱單詞查詢樹。它是一種樹形結構的資料結構。之所以快速,是因為它用空間代替了速度。

2、字典樹的特點:

字典樹有三個基本性質:

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

2、從根節點到某乙個節點,路徑上經過的字元連線起來,就是該節點對應的字串

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

3、乙個包含以下字串的字典樹結構如下圖所示:

4、字典樹的應用場景

1) 字串的快速查詢

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

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

2) 字典樹在「串」排序方面的應用

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

用字典樹進行排序,採用陣列的方式建立字典樹,這棵樹的每個節點的所有兒子

很顯然地按照其字母大小排序,對這棵樹進行先序遍歷即可。

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

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

5、字典樹的資料結構

由以上描述我們可以知道,字典樹的資料結構如下:

class trienode else else catch (exception e) finally catch (ioexception e) {

system.out.println("read from file and inserted " + numwords

+ " words into trie in " + (system.currenttimemillis() - t)

/ 1000.0 + " seconds.");

public int getsize() {

if (mtrie != null) {

return mtrie.size();

return 0;

public int getcount(string s) {

return mtrie.frequency(s);

測試結果截圖如下:

Mysql字首樹 字首樹(Trie樹,字典樹)

給出字串,如 abc 從頭結點開始,依次檢查,有沒有走向a的路,如果沒有,就新建出來,a作為路上的值 不是結點的值 如果有的話,就復用 在字串的結尾處的結點的值 1,表示有乙個是以該字串結尾的 1.可以查是否某個字串是以某個字串為字首的 2.還可以查 新增了幾次該字首 有多少字串是以該結點結尾的 3...

trie樹(字首樹)

trie 樹,又稱字典樹,單詞查詢樹。它 於retrieval 檢索 中取中間四個字元構成 讀音同try 用於儲存大量的字串以便支援快速模式匹配。主要應用在資訊檢索領域。trie 有三種結構 標準trie standard trie 壓縮trie 字尾trie suffix trie 這裡只將前兩種...

Trie字首樹原理

依次輸入 msb msn msbtech wltech會產生如上圖資料結構 1 如果出現可以公用的元素,則另開分支將不可以公用的部分進行儲存,最後乙個節點標記為綠色 2 在查詢時按照從頭到尾的順序進行查詢,只有每個節點都符合並且最後乙個字母為綠色final節點時代表查詢成功 3 若沒有可以公用的部分...