Python实现简单字典树的方法


Posted in Python onApril 29, 2016

本文实例讲述了Python实现简单字典树的方法。分享给大家供大家参考,具体如下:

#coding=utf8
"""代码实现了最简单的字典树,只支持由小写字母组成的字符串。
在此代码基础上扩展一下,就可以实现比较复杂的字典树,比如带统计数的,或支持更多字符的字典树,
或者是支持删除等操作。
"""
class TrieNode(object):
  def __init__(self):
    # 是否构成一个完成的单词
    self.is_word = False
    self.children = [None] * 26
class Trie(object):
  def __init__(self):
    self.root = TrieNode()
  def add(self, s):
    """Add a string to this trie."""
    p = self.root
    n = len(s)
    for i in range(n):
      if p.children[ord(s[i]) - ord('a')] is None:
        new_node = TrieNode()
        if i == n - 1:
          new_node.is_word = True
        p.children[ord(s[i]) - ord('a')] = new_node
        p = new_node
      else:
        p = p.children[ord(s[i]) - ord('a')]
        if i == n - 1:
          p.is_word = True
          return
  def search(self, s):
    """Judge whether s is in this trie."""
    p = self.root
    for c in s:
      p = p.children[ord(c) - ord('a')]
      if p is None:
        return False
    if p.is_word:
      return True
    else:
      return False
if __name__ == '__main__':
  trie = Trie()
  trie.add('str')
  trie.add('acb')
  trie.add('acblde')
  print trie.search('acb')
  print trie.search('ac')
  trie.add('ac')
  print trie.search('ac')

更多关于Python相关内容可查看本站专题:《Python字典操作技巧汇总》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
详解python时间模块中的datetime模块
Jan 13 Python
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
python取均匀不重复的随机数方式
Nov 27 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 Python
python为什么要安装到c盘
Jul 20 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
Python一些基本的图像操作和处理总结
Jun 23 Python
Python中操作符重载用法分析
Apr 29 #Python
Python中绑定与未绑定的类方法用法分析
Apr 29 #Python
Python过滤列表用法实例分析
Apr 29 #Python
Python松散正则表达式用法分析
Apr 29 #Python
python中私有函数调用方法解密
Apr 29 #Python
简单学习Python time模块
Apr 29 #Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 #Python
You might like
数字转英文
2006/12/06 PHP
介绍几个array库的新函数 php
2006/12/29 PHP
php中变量及部分适用方法
2008/03/27 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
jquery 标签 隔若干行加空白或者加虚线的方法
2016/12/07 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
Python实现一个带权无回置随机抽选函数的方法
2019/07/24 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
如何在python中实现线性回归
2020/08/10 Python
自考毕业自我鉴定范文
2013/10/27 职场文书
就业自我评价
2014/02/04 职场文书
人事任命书范文
2014/06/04 职场文书
营销学习心得体会
2014/09/12 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
Vue和Flask通信的实现
2021/05/19 Vue.js
Python 中random 库的详细使用
2021/06/03 Python