Python中的Trie实现

Trie树 python代码实现 """ 重要的是了解什么是Trie树,前缀树,这个数的应用还是挺多的,将字符串组成的路径记录下来,以此来快速 查找具有同一前缀的字符串! 首先Trie树的每个节点本身不存储字符,是整个树的路径信息存储字符,每个节点有个标志位isWord来标识从根节点root到当前node 节点的路径是否构成一个单词 所以TrieNode每个节点有两个成员变量, ... 阅读详情

Tries是我们用来存储字符串的数据结构。它们允许我们以最有效的方式搜索文本字符串。

本文将讨论我们如何在Python中实现一个Trie。

Python中的Trie数据结构

你可以把Trie看作一棵树,每个节点由一个字符组成。每个节点都有一个或多个子节点,这取决于它是一个字符串的内部字符还是最后一个字符。

代表字符串最后一个字符的节点没有子节点,它标志着字符串的结束。我们将在类的定义中加入一个标志变量来标记字符串的结束。

如果我们存储只由小写英文字母组成的字符串,那么Trie中的每个节点最多可以有26个子节点。如果字符串有字母以外的字符,那么某个节点的最大子节点数就等于不同字符的总数。

你可以在 Python 中定义一个 Node 类来实现 Trie 的一个节点,如下面的例子所示。

class Node:
    def __init__(self):
        self.children = []
        for i in range(26):
            self.children.append(None)
        self.isLeafNode = False

在这里,我们创建了一个名为children 的列表,用来定义一个字符是否是当前节点的子节点。由于我们考虑了26个字符,我们用26个None 的值初始化了这个列表。

如果一个字符不是当前节点的孩子,它的位置将包含值None 。否则,与该字符相对应的位置将存储该字符的节点。

在向children 列表中插入字符时,我们按照字符的字母顺序存储子节点。换句话说,字母a 的子节点将被存储在索引0,字母b 的子节点将被存储在索引1,等等。

在创建一个节点之后,我们需要创建一个类来定义一个Trie。在这个类中,我们将定义一个空节点,其列表中包含26个None ,代表英文字母的26个字符。

我们将称这个空节点为root 节点。

class Trie:
    def __init__(self):
        self.root = Node()

每当一个字符串被插入到Trie中,代表该字符串第一个字符的节点就会成为root 节点的子节点。请注意,我们将把包含字符串下一个字符的节点按照其位置作为列表元素来存储。

在创建了root 节点后,我们将在下面的章节中实现在三联体中插入一个词和在三联体中搜索一个词的方法。

在Python中的Trie中插入一个字符串

为了在Trie中插入一个字符,我们将首先找到要插入的字符串的长度。之后,我们将从三联体的root 节点开始爬行三联体。

以下是向Trie中插入字符串的算法:

  1. 计算要插入到Trie中的字符串的长度。将其存储在一个变量strLen 。
  2. 取一个变量crawler ,并将三联体的root 节点分配给该变量。
  3. 如果你在n ,检查字符串的第n个字符是否存在于Trie中的那一层。如果是,将其在children 列表中的位置存储到变量position ;然后,转到5 – 否则,转到4 。
  4. 为Trie创建一个新的节点,并将其分配给crawler 的索引position 。
  5. 将crawler 移到下一级。
  6. 检查我们是否已经到达了字符串的末端;如果是,转到7 – 否则,转到3 。
  7. 将当前节点标记为字符串的结尾。

在讨论了这个算法之后,现在让我们在Python中实现这个算法,将一个字符串插入到一个Trie中。

def insert(self, input_str)
DFA和trie字典树实现敏感词过滤(python和c语言) 现在做的项目都是用python开发,需要用做关键词检查,过滤关键词,之前用c语言做过这样的事情,用字典树,蛮高效的,内存小,检查快。 到了python上,第一想法是在pip上找一个基于c语言的python字典树模块,可惜没找到合适的,如果我会用c写python模块的话,我就自己写一个了,可惜我还不具备这个能力, 只能用python写了,性能差一点就差点吧,内存多一点也无所谓了。 用搜 阅读详情

相关推荐

Python高级数据结构——字典树(Trie)

字典树是一种强大的数据结构,特别适用于处理大量字符串集合的场景。通过高效的插入、查找和删除操作,字典树在搜索引擎、拼写检查、自动完成等应用中发挥着重要作用。在Python中,我们可以利用类似上述示例的代码轻松实现字典树,并加以灵活运用解决实际问题。理解字典树的基本概念、实现方式和应用场景,将有助于更好地应用字典树解决实际问题,提高算法的效率。

Echo_Wish 1405

实现简单的字典树(Trie)算法的Python方法

如果字符串的所有字符都存在于字典树中,并且最后一个字符所在的节点的is_end_of_word标记为True,则返回True。我们从根节点开始遍历字符串的每个字符,如果字符在当前节点的子节点中不存在,则创建一个新的节点,并将字符添加到子节点字典中。最后,在字符串的最后一个字符处,将is_end_of_word标记为True,表示一个单词的结束。每个节点包含一个字典,用于存储字符到子节点的映射,以及一个布尔值is_end_of_word,表示该节点是否是一个单词的结尾。让我们来测试一下实现的字典树。

BUG?不存在的! 119

Python实现Trie树

用Python实现Trie树的应用,并可以对英汉词典进行导入和检索、添加和删除,最终可以将导入的英汉词典保存到本地磁盘。内附两个.py文件,分别是tree.py和d_gui.py,tree.py是类和方法,d_gui.py是图形界面;一个.txt文件,是需要导入的英汉词典,有7000+词汇。只需运行图形界面即可。特别说明:python的版本以2.7为好,图形界面模块是wxPython,需要自行安装,且版本不宜过高,以免不兼容。

VisionPro动态坐标系构建:CogFixtureTool与CogFixtureNPointToNPointTool实战解析

本文深入解析了VisionPro中动态坐标系构建的核心技术,重点对比了CogFixtureTool与CogFixtureNPointToNPointTool的原理与应用。通过实战案例,阐述了如何利用坐标跟随(Fixturing)技术解决工业视觉检测中因零件位置偏移导致的测量不准问题,实现从“固定”到“随动”的思维跃迁,从而构建稳定、精准的检测程序。

weixin_29207439的博客 565

Shader之——花草动画shader

今天 ,接到了个需求,花草的动画。谈到花草动画,立马就想到顶点动画,让顶点动起来就可以实现了。但是有个问题,所有的草都往一个方向运动,这个就麻烦了。因为在shader里没有随机这种概念,提到最多的是用一张噪声图来模拟。在网上搜索了一下,发现有更好的办法,就是用每个顶点到一个点的距离来控制动画的开始,毕竟每个顶点到同一个点的距离很少是一样的。 float dis = distance ...

baicaishisan的博客 2185

从硅到氮化镓:用Sentaurus TCAD仿真GaN HEMT功率器件,我踩过的那些坑

本文分享了使用Sentaurus TCAD仿真GaN HEMT功率器件的实战经验,详细解析了从硅基到氮化镓的技术转型中遇到的五大关键挑战:材料参数设置、极化效应建模、网格划分策略、陷阱模型校准以及仿真与实测数据匹配。通过具体案例和参数优化方法,帮助工程师避开常见陷阱,提升TCAD仿真精度与效率。

weixin_28726671的博客 379

告别懵圈!用CANoe手把手解析ISO15765多帧传输(附实战报文分析)

本文详细解析了ISO15765多帧传输协议在汽车电子诊断中的应用,通过CANoe实战演示了从首帧发送到流控协商再到连续帧传输的完整流程。文章包含嵌入式系统诊断协议的深度分析,特别适合UDS和CAN总线开发人员学习多帧传输机制及常见问题解决方案。

weixin_30813225的博客 282

Multisim14.3主数据库访问冲突:Windows更新KB5065426卸载与系统兼容性修复指南

本文针对Multisim14.3在Windows更新KB5065426后出现的主数据库访问冲突问题,提供了详细的解决方案。通过卸载问题更新、修复系统兼容性及调整权限设置,帮助用户快速恢复元器件库的正常访问,确保电路仿真设计的连续性。

lstm7chronicler的博客 514

RK3588+TRL8367s 四网口千兆交换机配置与优化实战

本文详细介绍了基于RK3588高性能SoC与TRL8367s千兆交换芯片构建四网口交换机的完整实战流程。内容涵盖硬件连接、设备树配置、内核驱动加载、性能优化及常见问题排查,重点解析了RGMII时序调试、DSA架构配置等关键步骤,为嵌入式网络设备开发提供实用指南。

weixin_29266647的博客 675

理想L9高通QAM8797座舱域控制器全拆解|全网独家复现 硬件架构升级、电源散热优化、多屏低延迟交互、车机系统赋能高端智能座舱落地

随着智能汽车向舱驾一体、全域智能化、多模交互方向迭代,传统单一功能座舱芯片已无法满足多屏高刷渲染、全车AI语音、车内视觉感知、高速车载通信的叠加算力需求。2026款全新理想L9作为旗舰级智能SUV,全面搭载高通新一代旗舰座舱域控制器QAM8797,搭配自研马赫M100 AI芯片、国产车规主控芯片,构建起高性能、高可靠、低延迟的车载中央计算平台。

getusushu的博客 387

64、5G 侧链通信技术详解

本文详细解析了5G侧链通信的关键技术,包括资源感知与选择、UE间协调、混合ARQ、功率控制、信道探测与CSI报告以及侧链同步。资源感知与选择通过周期性或随机方式实现资源分配,UE间协调通过主动或被动方式避免资源冲突。混合ARQ机制确保数据传输可靠性,功率控制和信道探测优化传输质量并减少干扰。侧链同步则通过多种方式确保设备间时间一致性。这些技术相互配合,构建了高效稳定的5G侧链通信体系,适用于智能交通、物联网、应急通信等多个领域,为未来无线通信发展提供强大支撑。

oil88的博客 102

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: python中的reduce函数
下一篇: 用Python创建海龟图形(turtle 库用法)
Python热爱者
博客等级 码龄7年 3056粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值