字典樹 Trie樹(持續更新)

2021-10-24 12:06:24 字數 2338 閱讀 3111

今天開始學習字典樹,順便做做筆記,等多刷幾道題再來更新一波經驗

字典樹,又稱單詞查詢樹、字首樹、鍵樹,是一種樹形結構,是一種雜湊樹的變種。

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

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

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

4)它的key都為字串,能做到高效查詢和插入,時間複雜度為o(k),k為字串長度,缺點是如果大量字串沒有共同字首時很耗記憶體。

最大限度地減少無謂的字串比較,查詢效率比雜湊表高

空間換時間

利用字串的公共字首來降低查詢時間的開銷以達到提高效率的目的。

1、自動補全(單詞自動補全)

2、拼寫檢查(檢查單詞是否拼寫正確)

3、ip路由(最長字首匹配)

4、九宮格打字**(根據字首**單詞)

雜湊表搜尋單詞不能實現:

而且隨著雜湊表大小的增加,會出現大量的衝突,時間複雜度可能會增加到o(n)。

具體**實現:可以參考力扣【208、實現字典樹】

class

trie

//插入單詞

public

void

insert

(string word)

//查詢單詞是否存在

public

boolean

search

(string word)

//查詢以prefix字串為字首的單詞是否存在

public

boolean

startswith

(string prefix)

}

class

trie

//插入單詞

public

void

insert

(string word)

//包含當前節點,跳到下一節點

curr = curr.next[c -

'a'];}

curr.isend =

true;}

//查詢單詞是否存在

public

boolean

search

(string word)

curr = curr.next[c -

'a'];}

return curr.isend;

}//查詢以prefix字串為字首的單詞是否存在

public

boolean

startswith

(string prefix)

curr = curr.next[c -

'a'];}

return

true;}

}/**

* your trie object will be instantiated and called as such:

* trie obj = new trie();

* obj.insert(word);

* boolean param_2 = obj.search(word);

* boolean param_3 = obj.startswith(prefix);

*/

end:表示以當前節點為結尾的單詞的個數

public

class

trie

}private trienode root;

public

trie()

public

void

insert

(string word)

node = node.next.

get(ch)

; node.path++;}

node.end++;}

public

boolean

search

(string word)

if(node.end ==0)

return

false

;return

true;}

public

boolean

startswith

(string word)

return

true;}

}

資料結構設計之實現 trie (字首樹)[sumatran rhinoceros]

208. 實現 trie (字首樹) 包括insert、search、startwith、delete四種操作

Trie樹(字典樹)

trie樹的核心思想是用空間換時間,通過在樹中儲存字串的公共字首,來達到加速檢索的目的。例如,對於一棵儲存由英文本母組成的字串的trie樹,如下圖 trie樹在實現的時候,可以用左兒子右兄弟的表示方法,也可以在每個節點處開設乙個陣列,如上圖的方法。trie樹的主要操作是插入 查詢,也可以進行刪除。插...

字典樹 Trie樹

字典樹 trie樹 顧名思義是一種樹形結構,屬於雜湊樹的一種。應用於統計 排序 查詢單詞 統計單詞出現的頻率等。它的優點是 利用字串的公共字首來節約儲存空間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。字典樹的結構特點 根節點不代表任何字元。其他節點從當前節點回溯到根節點可以得到它代表的字串。...

字典樹 trie樹

amy 56 ann 15 emma 30 rob 27 roger 52首先存入amy,level 0表示根,不持有資料。其餘每個節點持有乙個字元 葉子節點持有資料,且持有的字元為 0 level 0 root a level 1 m level 2 y level 3 0 56 level 4新...