trie,又稱前綴樹或字典樹. 它利用字符串的公共前綴來節約存儲空間.
- 定義
Trie樹中每個單詞都是通過character by character方法進行存儲,相同前綴單詞共享前綴節點.
可以看到,每條路徑組成一個單詞.上面這顆樹存了to/tea/ted/ten/inn這些詞.
- 性質
- (1)根節點不包含字符,除根節點外的每個節點只包含一個字符。
- (2)從根節點到某一個節點,路徑上經過的字符連接起來,爲該節點對應的字符串。
- (3)每個節點的所有子節點包含的字符串不相同。
- 性質
- 應用
- 詞頻統計
比直接用hash節省空間 - 搜索提示
輸入前綴的時候提示可以構成的詞 - 作爲輔助結構
如後綴樹,AC自動機等的輔助結構
- 詞頻統計
-
實現
雖然python沒有指針,但是可以用嵌套字典來實現樹結構.對於非ascii的單詞,統一用unicode編碼來插入與搜索.
#coding=utf-8
class Trie:
root = {}
END = '/'
def add(self, word):
#從根節點遍歷單詞,char by char,如果不存在則新增,最後加上一個單詞結束標誌
node = self.root
for c in word:
node=node.setdefault(c,{})
node[self.END] = None
def find(self, word):
node = self.root
for c in word:
if c not in node:
return False
node = node[c]
return self.END in node