数据结构与算法 / 字符串匹配 / Trie 树
一、誕生原因
傳統字符串比較時,需要將待比較的字符串與字符串集合中每一個串進行比較,結果比較浪費時間。
Trie 樹的發明就是為了解決上述問題。
二、基本信息
又稱字典樹,是一種樹形結構,是一種哈希樹的變種。
三、原理
通過樹形結構,將字符串集合中各個串的前綴統一為一個,這樣每次查找串時相同的前綴的串僅需要比對同一個前綴就行了。
栗子:假如字符串集合中僅僅包含 26 個英文字母并且都為小寫,那么該字符串集合組成的 Trie 樹的部分如下圖所示:
每個節點實際上是一個包含 26 個元素的數組,數組的索引是字符的 Ascii 碼值 - a 字符的 Ascii 碼值的差值,栗子:b - a = 98 - 97 = 1,這樣就找到了 b 元素對應的下一個節點的 a 字符元素所在的節點。
上圖中每一個(子節點 n),都是包含了 26 個元素的數組,每個元素有可能有子節點,有的有可能是 null,為 null 就說明當前的字符串到此為止。
根據上述說明可以知道,Trie 樹查找是十分高效的,但是建 Trie 樹是比較耗費時間的,并且相當耗費內存,是一個明顯以空間換時間的策略。
四、時間復雜度
建 Trie 樹的過程的時間復雜度為 O(n),n 為字符串集合中所有字符的數量,即:所有的字符串長度和。
匹配字符串的時間復雜度為 O(k),k 為待匹配的字符串的長度。
五、應用場景
搜索引擎中,輸入部分的字符之后其下拉列表可以顯示出以當前字符串為前綴的部分完整的字符串。其原理是后臺早在之前就已經創建了 Trie 樹,當用戶輸入了部分字符串前綴時,系統直接搜索 Trie 樹,到達前綴最后的節點之后,將該節點之后字符串羅列出來就完成了上述功能。
?
參考:極客時間《數據結構與算法之美》王爭
這門課真心推薦,內容很經典、栗子很形象,里面還包含了很多面試題目。真是居家旅行必備良藥。
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的数据结构与算法 / 字符串匹配 / Trie 树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法 / LRU 缓存淘汰算法
- 下一篇: 数据结构与算法 / 字符串匹配算法汇总