字典树,又称单词查找树,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实现字典树相关推荐

  1. python字典查询_python查询字典

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 开发准备cas 的 python sdk 包含了用于访问和操作 cas 的所有 ...

  2. python字典嵌套字典构造_python实现字典嵌套列表取值

    python实现字典嵌套列表取值 如下所示: dict={'log_id': 5891599090191187877, 'result_num': 1, 'result': [{'probabilit ...

  3. python图的字典表示_Python dict字典精讲

    Python 字典也是一个集合,但是其每个元素包含两部分--键和值,如图1所示: 图1:字典模型 和列表一样的是,字典对元素个数没有限制,可以动态添加和删除元素:和列表不同的是,字典对元素自动按照某种 ...

  4. python获取字典长度_Python基础-字典

    字典的创建 字典是存放一系列键值对的数据结构,对标js中的对象,也对标java中的map. 现实中的例子就是通讯录,根据这个人的名字就可以得到他的电话号码. 定义字典的写法跟js中定义对象是一样的,两 ...

  5. python中字典使用_python中字典的使用

    python中的字典的特性: 在字典中的元素是散列存放的,没有顺序, 在进行增删改查的时候使用字典中需要的关键字(key)即可. 一: 创建字典 1)直接定义一个: dict = {'ob1':'co ...

  6. python修改key名_python修改字典键(key)的方法

    python字典中,值可任意更改:但键是唯一的,不支持直接修改.若真的需要修改字典中的键,可通过几种间接方式实现. 新建空白字典. info = {} 给字典添加键-值对. info["x& ...

  7. python dictionary怎么用_python Dictionary字典使用

    一.dictionary数据类型的结构是:{key1:value1, key2:value2, ...},即键值对.字典的健必须是不可更改的类型,如字符串.数字.元祖等:而值则可以是任意的数据类型,而 ...

  8. python打印换行符_Python换行符以及如何在不使用换行符的情况下进行Python打印

    python打印换行符 Welcome! The new line character in Python is used to mark the end of a line and the begi ...

  9. python 打印列表元素_Python程序以不同方式打印列表元素

    python 打印列表元素 In this program – we are going to learn how can we print all list elements, print spec ...

最新文章

  1. 1Boost之TCP,Client and Server
  2. Kaggle API
  3. 【线上分享】超分辨技术在RTC领域面临的机遇与挑战
  4. python读取windows系统的文件后print乱码问题的解决
  5. 如何用Python破解验证码,适合新手练手
  6. metasploit基本使用方法
  7. POI (Apache POI)
  8. vue个人博客项目部署上线
  9. 错误解决:java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to star
  10. 使用js获取证券交易实时数据
  11. 包看包会的变量与数据类型
  12. 2020年6月TIOBE编程语言排名公布
  13. 我的 OneNote 入门心得
  14. 互联网寒冬来袭,面对裁员和竞争的双重压力,程序员该何去何从?
  15. 【Rochester】MongoDB的基本语法和使用
  16. 2022不一样的分享--行走的皮卡丘
  17. FTP在电脑和安卓设备间的妙用!
  18. (七十六):Masked Autoencoders Are Scalable Vision Learners
  19. TortoiseSVN服务端和客户端--百度云下载
  20. JDK的下载安装(含安装文件)

热门文章

  1. 域名,端口,IP总结
  2. android pd px sp 转换
  3. mysql 9 5.5.29_在CentOS 6.3中安装与配置Mysql-5.5.29的方法
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的企业计划管理系统
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的驾校预约信息管理系统
  6. 奇安信集团笔试题:二叉树的最近公共祖先(leetcode236),杀死进程(leetcode582)...
  7. 回想四叉树LOD地形(上)
  8. Java字符串与日期互转
  9. Creating a Pager Control for ASP.NET以及Dino Esposito 分页组件的一个 Bug
  10. Python稳基修炼的经典案例9(计算机二级、初学者必会turtle库例题)