字典树-Python

字典树

字典树又叫前缀树、单词查找树,树形结构,是哈希树的变种。能够统计、排序和保存大量的字符串,经常被搜索引擎系统用于文本词频统计。优点是利用字符串的公共前缀来减少查询时间,最大程度减少无谓字符串的比较,查询效率高于哈希树。

字典树的原理是这样的,假设我现在有一些字符串["a","ab","abc","abcd"],它们的特点是具有公共前缀,适合使用树形数据结构保存,从根节点到叶子结点的一条路径就能保存所有具有公共前缀的单词。

使用Python实现非常简单,考虑到删除操作涉及较少,暂不实现,简洁版代码如下:

class TreeNode(object):def __init__(self):self.nodes = {}         # 记录当前结点的子结点self.is_leaf = False   # 当前结点是否表示一个单词self.count = 0          # 单词树中单词的总量def insert(self,word):curr = selffor c in word:if not curr.nodes.get(c,None):new_node = TreeNode()curr.nodes[c] = new_nodecurr = curr.nodes[c]curr.is_leaf = Trueself.count += 1returndef insert_many(self,words):for word in words:self.insert(word)returndef search(self,word):curr = selftry:for c in word:curr = curr.nodes[c]except:return Falsereturn curr.is_leaf
问题实战
分词问题

给定一个字符串s,和一个词典Dict。对字符串s基于词典dict进行分词,存在包含情况的按最长的分词。

输入s=cde ab abc cde gf

dict=["abc" ,"abd","cde","abc cde","abc abd"]

输出s=#cde#  ab  #abc cde#  gf

解决本题要点如下:

  • 将词典构建字典树
  • 遍历字符串,将每个单词插入字典树,并记录满足题目要求的最长单词
  • 在遍历的过程中,如果已经出现前缀缺失,及时剪枝
词典中最长单词

解决本题要点如下:

  • 对字符串数组排序,构建字典树
  • 遍历数组,将每个单词插入字典树,并记录满足题目要求的最长单词
  • 在遍历的过程中,如果已经出现前缀缺失,及时剪枝
单词替换

本题要点如下:

  • 使用字典树保存词根
  • 将 sentence 切割为单词,保存在数组中
  • 遍历数组中的单词,如果访问至叶子结点(is_leaf == True),证明单词具有该词根,将其替换

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/651627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HBase入门:运行机制

文章目录 HBase 系统架构客户端ZooKeeper 服务器Master 主服务器Region 服务器 Region 服务器工作原理用户读写数据的过程缓存的刷新StoreFile合并 Store 的工作原理HLog 的工作原理 HBase 系统架构 HBase 的系统架构包括客户端、ZooKeeper 服务器、Master 主服务器、Region服…

什么是SQL,什么是MYSQL?MYSQL的架构以及SQL执行语句的过程是什么?有哪些数据库的类型?一篇文章带你弄懂!

文章目录 前言一、为什么需要数据库二、数据库的相关概念1.什么是结构化查询语言 (SQL)2.什么是数据库管理系统 (DBMS)3.什么是 MySQL 数据库 三、数据库分类1.关系型数据库(SQL)2.非关系型数据库(NoSQL) 四、MYSQL架构1.各组件功…

【大厂AI课学习笔记】1.2 现阶段人工智能方法和技术领域

目录 1.2 现阶段人工智能方法和技术领域 1.2.1 从技术应用场景展开 计算机视觉 语音识别 自然语言处理 1.2.2 实现AI的技术工具 机器学习的主要类型: 深度学习的重要性: 1.2 现阶段人工智能方法和技术领域 1.2.1 从技术应用场景展开 计算机视觉…

OpenCV-27 Canny边缘检测

一、概念 Canny边缘检测算法是John F.Canny与1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的最优算法。最优边缘检测的三个主要评价标准是: 低错频率:表示出尽可能多的实际边缘,同时尽可能的减小噪声产生的误…

503 Service Temporarily Unavailable nginx 原因和解决办法

前言 HTTP 503 Service Temporarily Unavailable 错误通常表示服务器无法处理请求,可能是由于服务器过载、维护或其他临时性问题导致的。在 Nginx 中,这种错误通常与后端服务的可用性问题相关。以下是可能的原因和解决办法: 正文…

windows安装openResty

一、openResty安装 1、下载 进入openResty官网: OpenResty - 下载 下载下图中的64zip包 2、解压zip,进入目录 进入conf目录(openresty-1.25.3.1-win64\conf),找到nginx.conf文件,打开 3、修改配置文件&a…

ChatGPT AI革命-阅读心得

ChatGPT AI革命-阅读心得 一、揭秘ChatGPT二、OpenAI三剑客三、让ChatGPT飞起来四、ChatGPT的商业化落地五、ChatGPT编程六、AIGC与产业生态七、其他AIGC工具八、AIGC背后的伦理、法制和法律 本书围绕2022年11月OpenAI发布ChatGPT,ChatGPT在人工智能领域引起巨大轰动…

k8s学习-DaemonSet和Job

1.1DaemonSet是什么 Deployment部署的副本Pod会分布在各个Node上,每个Node都可能运行好几个副本。DaemonSet的不同之处在于:每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有: (1)在集群的每个节点上运⾏存…

Redis 面试题 | 16.精选Redis高频面试题

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【css揭秘】

文章目录 背景与边框半透明边框多重边框box-shadowoutline 背景定位background-positionbackground-origincalc() 条纹背景水平条纹 形状圆形圆柱自适应的椭圆半椭圆四分之一椭圆 背景与边框 半透明边框 目标:给一个容器设置一层白色背景和一道半透明白色边框 写…

Redis学习——入门篇③

Redis学习——入门篇③ 1. Redis事务1.1 事务实际操作1.2 watch 2. Redis管道(pipelining)2.1 管道简介2.2 管道实际操作2.3 管道小总结 3. Redis(pub、sub)发布订阅(不重要)3.1 简介3.2 发布订阅实际操作 这是一个分水岭…

1.【Vue3】前端开发引入、Vue 简介

1. 前端开发引入 1.1 前端开发前置知识 通过之前的学习,已经通过 SpringBoot 和一些三方技术完成了大事件项目的后端开发。接下来开始学习大事件项目的前端开发,前端部分借助两个框架实现: Vue3(一个 JS 框架)基于 …

go 引用fork后的模块的两种方式(replace和工作区)

很久没更新了,一是工作琐碎,二是处在舒适区,但最近看着身边的同事一个个离开,危机感骤然而生,不得不重拾书本,毕竟生活还得继续,不卷是不可能的,谁让我们生在这个卷中卷的国度&#…

MySQL主从同步数据库环境部署

本次部署的是MySQL主从环境的数据库信息 IP用途134.80.21.140Master134.80.21.141Slave 下面部署的详细配置 1.卸载系统自带的Mariadb [rootmysql-master ~]# rpm -qa |grep -i mariadb mariadb-libs-5.5.68-1.el7.x86_64 rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodep…

指数计算(填空)

解题思路: 7的2020次方很大,需要用BigInteger来进行运算。 pow用来算指数运算。 remainder用来算BigInteger之间的取余。 解题代码: public static void main(String[] args) {BigInteger xnew BigInteger ("7");BigInteger ynew…

开源直播电商系统的实现方式(仿抖音电商模式)

当下,传统的图文电商模式正在走向没落,以“抖音”为首的直播电商模式备受用户追捧,它具有直观与互动的特点,拥有传统电商所不具备的优势。而且,当前正是直播电商的红利期,很多主播和品牌商都通过直播电商业…

阿里云上传文件

阿里云上传文件1&#xff08;未分模块&#xff09; 1、pom文件加入依赖 <!--阿里云 OSS 依赖--> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </d…

Bug: git stash恢复误drop的提交

Bug: git stash恢复误drop的提交 前几天在写ut时突然需要通过本地代码临时出一个包&#xff0c;但是本地ut又不想直接作为一个commit提交&#xff0c;所以为了省事就将ut的代码暂时stash起来。出完包后想apply stash&#xff0c;但是手误操作点成了drop stash&#xff0c;丢失了…

并发编程【2】

01.什么是僵尸进程&#xff0c;孤儿进程 僵尸进程是指在进程已经终止但是其父进程尚未终止信息&#xff08;退出状态码&#xff09;的情况下。保留在进程表中的进程。僵尸进程不占用实际的系统资源&#xff0c;但会占用一个进程ID&#xff0c;并且会在系统中产生垃圾。 孤儿是指…

蒙特卡洛模拟之合成控制法

蒙特卡洛模拟之合成控制法&#xff08;Monte Carlo Simulation in Synthetic Control Method&#xff09;是一种用于评估政策效果的统计方法。该方法通过对比实验组和合成控制组之间的差异&#xff0c;从而估计政策的影响。 合成控制法是一种非实验性的政策评估方法&#xff0…