python实现字典树 时间复杂度_Python实现字典树
字典樹,又稱單詞查找樹,Trie 樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用于統計,排序和保存大量的字符串(但不僅限于字符串),所以經常被搜索引擎系統用于文本詞頻統計。它的優點是:利用字符串的公共前綴來減少查詢時間,最大限度地減少無謂的字符串比較,查詢效率比哈希樹高。
注:定義來自百度百科。
字典樹的主要性質
它有 3 個基本性質:
根節點不包含字符,除根節點外每一個節點都只包含一個字符;
從根節點到某一節點,路徑上經過的字符連接起來,為該節點對應的字符串;
每個節點的所有子節點包含的字符都不相同。
基本功能介紹
在接下來的內容里,我們將逐步介紹字典樹的具體功能是如何實現的。
1. 創建 TrieNode 類
創建一個 TrieNode 的類,構建內置字典結構
具體實現代碼如下
class TrieNode:
def __init__(self):
self.nodes = dict() # 構建字典
self.is_leaf = False
2. 添加 insert 函數
插入一個字到字典樹中
具體實現代碼如下:
def insert(self, word: str):
curr = self
for char in word:
if char not in curr.nodes:
curr.nodes[char] = TrieNode()
curr = curr.nodes[char]
curr.is_leaf = True
3. 添加 insert_many 函數
插入一列表的字到字典樹中
具體實現代碼如下:
def insert_many(self, words: [str]):
for word in words:
self.insert(word)
4. 添加 search 函數
在字典樹里面查詢一個字
具體實現代碼如下:
def search(self, word: str):
curr = self
for char in word:
if char not in curr.nodes:
return False
curr = curr.nodes[char]
return curr.is_leaf
最終代碼如下:
class TrieNode:
def __init__(self):
self.nodes = dict() # 構建字典
self.is_leaf = False
def insert(self, word: str):
curr = self
for char in word:
if char not in curr.nodes:
curr.nodes[char] = TrieNode()
curr = curr.nodes[char]
curr.is_leaf = True
def insert_many(self, words: [str]):
for word in words:
self.insert(word)
def search(self, word: str):
curr = self
for char in word:
if char not in curr.nodes:
return False
curr = curr.nodes[char]
return curr.is_leaf
用在統計和排序大量字符串,如自動機。字典樹能做前綴搜索,在正則匹配,數據壓縮,構建索引都可能用到。
總結
以上是生活随笔為你收集整理的python实现字典树 时间复杂度_Python实现字典树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泛型java实例_【Java学习笔记】J
- 下一篇: 大熊猫丫丫吃上新鲜竹子 网友:孩子终于吃