飄逸的python - 實現trie樹

trie,又稱前綴樹或字典樹. 它利用字符串的公共前綴來節約存儲空間.

  • 定義
    Trie樹中每個單詞都是通過character by character方法進行存儲,相同前綴單詞共享前綴節點.
    trie0
    可以看到,每條路徑組成一個單詞.上面這顆樹存了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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章