飘逸的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

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值