实现 Trie (前缀树),或者说字典树(单词查找树)

Trie树 c++实现 Trie,又称单词查找树、前缀树,是一种多叉树结构。 与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。 阅读详情

Trie数据结构介绍:

具有相同前缀的字符串使用公共前缀。
下图为存储了字符串"app", “apps” , “pe” 的字典树结构图
在这里插入图片描述

所以设计时,每个Trie类都有个children属性和isEnd属性

  • children是个Trie数组(无参构造时初始化大小为26,对应26个字母)
  • isEnd属性记录此结点是否是字符串的结尾

Note:
..结点若未被字符串使用,则未被构造,为null

正式实现代码:

class Trie {
    private Trie[] children;
    private boolean isEnd;

    /** Initialize data structure  */
    public Trie() {
        children = new Trie[26];  //每一层需要26个Trie结点(字母)
        isEnd = false;  //记录此结点是否是字符串的结尾
    }

    /** Inserts a word into the trie. */
    public void insert(String word) {
        Trie node = this;  //利用反射获取本类Trie来插入
        for (int i = 0; i < word.length(); i++) {
            char ch = word.charAt(i);
            int index = ch - 'a';
            if (node.children[index] == null) {  //如果这个结点还未成为前缀的一部分,就开通
                node.children[index] = new Trie();
            }
            node = node.children[index];  //不断往下进入
        }
        node.isEnd = true; //这是结尾
    }


    /** Returns if the word is in the trie. */
    public boolean search(String word) {
        Trie node = searchPrefix(word);
        return node != null && node.isEnd;  // word字符串结尾字符非空 且 是结尾
    }

/** Returns if there is any word in the trie that starts with the given prefix. */
    public boolean startsWith(String prefix) {
        return searchPrefix(prefix) != null;
    }

    private Trie searchPrefix(String prefix) {
        Trie node = this;
        for (int i = 0; i < prefix.length(); i++) {
            char ch = prefix.charAt(i);
            int index = ch - 'a';
            if (node.children[index] == null) {  //如果有结点未开通说明此前缀不存在
                return null;
            }
            node = node.children[index];  //不断往下
        }
        return node;  //返回一个字符串结尾字符的结点
    }
}

由于search(String word)与
boolean startsWith(String prefix)都需要进行寻找前缀的工作,所以将内容抽取出来写成
Trie searchPrefix()
可以减少代码量,这是一种简洁的思想。

字典树-大量字符串前缀及出现次数是否存在统计(Trie树-java)算法实现 前言        字典树又称单词查找树,它是一种树形结构,是一种哈希树的变种,典型应用是用于统计,保存大量的字符串(但不仅限于字符串),统计以是否有以某字符串最为前缀的字符串,有的话有多少,某字符串出现了多少次等,所以经常被搜索引擎系统用于文本词频统计。        它与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典树里没有该单 阅读详情

相关推荐

字典树的C++实现 Implement of trie tree

Trie,字典树,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。   性质: 1.根节点不包含字符,除根节点外的每一个节点都只包含一个字符。 2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 3.每个节点的所有子节点包含的字符都不相同。 优点是查询快。对于长度为m的键值,最坏情况下只需花费O(m)的时间

人生如路 8336

[LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

Implement a trie withinsert,search, andstartsWithmethods. Note:You may assume that all inputs are consist of lowercase lettersa-z. 这道题让我们实现一个重要但又有些复杂的数据结构-字典树, 又称前缀树或单词查找树,详细介绍可以参见网友董的博客,...

weixin_30847939的博客 281

JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤

JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤 文章目录JAVA实现trie树(前缀树,字典树)进行敏感词检测/过滤定义优点:缺点:应用敏感词检测开始构建敏感词Trie树时间复杂度敏感词去重敏感词检测去特殊字符方法结束标识符JAVA实现完整代码初始化词库 定义 在计算机科学中,trie树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而

weixin_44019182的博客 3833

208 Implement Trie (Prefix Tree)

Implement a trie with insert, search, and startsWith methods.Note:You may assume that all inputs are consist of lowercase letters a-z.这道题让我们实现一个重要但又有些复杂的数据结构-字典树, 又称前缀树或单词查找树,例如,一个保存了8个键的trie结构,"A", "...

dongbeier的博客 170

算法基础:前缀树(Trie tree、字典树)

算法成神之路:前缀树(Trie tree、字典树)

阿呆的隐秘角落 4079

海波龙(Oracle Hyperion)单点登陆问题记录

Oracle海波龙套件已经多年未更新,按Oracle官方文档实施单点登陆启用之后,SmartView工具通过专用链接方式无法登陆系统。 在抓包逆向分析之后 定位到HspSmartViewServlet类在执行以下代码时获得的ssotoken无效导致,在某大厂工作的时候曾通过在filter中截获请求的方式植入Attribute,保留账号密码并在单点程序中处理实现登陆。 但在完美世界的环境中...

cainiaoEzu的专栏 1970

字典树实现(C语言)

字典树,又称前缀树或单词查找树,是一种用于快速检索的树形结构。它是一种哈希树的变种,利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。字典树的核心思想是空间换时间。它将字符串集合中的所有字符串共享公共前缀的字符只保存一份,从而节约了存储空间,并加快了查询速度。

qq_40844444的博客 676

Python 逆向解析知乎盐选反爬字体,实现内容精准还原

本文详细解析了知乎盐选内容的反爬字体机制,并提供了使用Python逆向解析WOFF字体文件的完整方案。通过fontTools库构建解码字典,实现乱码文本的精准还原,帮助开发者应对动态字体策略,同时强调法律与道德风险。

weixin_29268385的博客 1295

Trie树(字典树,单词查找树)

知识点系列之---Trie树

forever_dreams的博客 2万+

(最新更新!)2024全国大学生数学建模竞赛(国赛)B题决策优化+鲁棒模型完整建模全解全析

2024全国大学生数学建模竞赛(国赛)B题完整建模全解全析(已更新!)

Yilu264的博客 9417

Qt Location实战:5分钟搞定地图插件切换与卫星图源加载(附完整代码)

本文是Qt Location开发系列教程的实战指南,详细讲解如何在Qt应用中快速实现地图插件(如Esri、OSM、MapboxGL)的动态切换与卫星图源的加载。通过清晰的代码示例,帮助开发者理解插件机制,解决常见配置问题,并在5分钟内构建出具备交互式地图切换功能的应用程序。

kafka6courier的博客 523

Trie树(字典树,前缀树,键树)分析详解

Trie树概述   Trie树,又称字典树、前缀树、单词查找树、键树,是一种多叉树形结构,是一种哈希树的变种。Trie这个术语来自于retrieval,发音为/tri:/ “tree”,也有人读为/traɪ/ “try”。Trie树典型应用是用于快速检索(最长前缀匹配),统计,排序和保存大量的字符串,所以经常被搜索引擎系统用于文本词频统计,搜索提示等场景。它的优点是最大限度地减少无谓的字符串比较,查

Hyman's Blog 2万+

对接萤石平台调用播放

萤石api 管理 · 萤石开放平台API文档 httpclient pom <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> package com.ruoyi...

u011799016的博客 1773

数据结构:Trie(前缀树/字典树)

Trie 又称字典树、前缀树和单词查找树,是一颗非典型的多叉树模型,即每个结点的分支数量可能为多个。Trie这个名字取自“retrieval”,检索,读音和 try 相同。

m0_63997099的博客 3949

PADS导出PCB正反面丝印为CAD文件的方法

本文介绍如何将PADS绘制的pcb格式的PCB文件顶底层丝印及板框导出为CAD的dxf文件格式,并且将底层丝印进行镜像为正常视角

luguodeyo的博客 3292

45、概率与模糊性:粗糙事件与模糊事件概率的探索

本文探讨了概率理论与模糊性理论在处理现实世界不确定性中的应用,重点分析了模糊事件和粗糙事件的概率定义、性质及其条件概率。同时,介绍了近似贝叶斯网络分类器在信息系统中的应用,以及如何通过概率决策约简提高分类效率。这些方法为处理不确定信息提供了灵活的工具,并在决策和数据分析中具有重要价值。

ik67890123的博客 133

Trie树(字典树)

Trie树,又叫字典树前缀树(Prefix Tree)单词查找树或键树,是一种多叉树结构。如下图:上图是一棵Trie树,表示了关键字集合{“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”}。根节点不包含字符,除根节点外的每一个子节点都包含一个字符。从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。每个节点的所有子节点包含的字符互不相同。通常在实现的时候,会在节点结构中设置一个标志,用来标记该结点处是否构成一个单词(关键字)。

2301_80224556的博客 2781

机器学习初探——用线性回归预测股价趋势

在进入代码之前,先建立一个大框架。类型一句话解释金融中的应用监督学习给机器“标准答案”让它学预测股价(历史数据→未来价格)无监督学习不给答案,让机器自己找规律把相似股票自动归类、发现异常交易强化学习让机器通过“试错”学习最优策略AI自动交易、量化策略优化我们现阶段只学“监督学习”——这是最常用、最容易上手的。准备一堆“特征”和对应的“标签”(比如:历史的第N天 → 那天的价格)喂给机器一个“算法”(比如线性回归)机器“拟合”出一个规律(比如找到一条最合适的直线)

109

Trie 树(又称字典树,单词查找树)

Trie 树, 又称字典树,单词查找树。它来源于retrieval(检索)中取中间四个字符构成(读音同try)。用于存储大量的字符串以便支持快速模式匹配。主要应用在信息检索领域。   Trie 有三种结构: 标准trie (standard trie)、压缩trie、后缀trie(suffix trie) 。 最后一种将在《字符串处理4:后缀树》中详细讲,这里只将前两种。  

arhaiyun的专栏 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

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

Trie树(前缀树、字典树)

目录 什么是前缀树 前缀树的优缺点: 前缀树的应用 什么是前缀树 Trie树,又叫字典树、前缀树(Prefix Tree)、单词查找树 或 键树,是一种多叉树结构。如下图: 好比假设有b,abc,abd,bcd,abcd,efg,hii 这6个单词,那我们创建trie树就得到 上图可以归纳出 Trie 树的基本性质: 1. 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。 2. 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。 3. 每个节点的所有子节

u011764940的博客 3639

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【算法】Trie数(前缀树/字典树)简介及Leetcode上关于前缀树的题

前几天同学面今日头条被问到了Trie树,刚好我也对于Trie树这种数据结构不是很熟悉,所以研究了一下前缀树,然后把Leetcode上关于前缀树的题都给做了一遍。 Leetcode上关于前缀树的题有如下: 208. Implement Trie (Prefix Tree)这道题是实现一个前缀树,作为基础题啦 Add and Search Word - Data structure design这道题是

haolexiao的专栏 8453

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

树 - 前缀树(Trie Tree)

在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。Trie 这个术语来自于 retrieval。根据词源学,trie 的发明者 Edward Fredkin 把它读作/ˈtriː/ “tree”。

珍惜当下 6043

【树 - 前缀树(Trie Tree)】Trie,又称字典树、单词查找树或键树,是一种树形结构,是一种哈希树的变种

在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。Trie 这个术语来自于 retrieval。根据词源学,trie 的发明者 Edward Fredkin 把它读作/ˈtriː/ “tree”。

abclyq的博客 1007

算法设计与分析——字典树(前缀树、Trie树)

字典树又称单词查找树、前缀树、Trie树等,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它可以利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。它还有很多变种,如后缀树、Radix Tree、PATRICIA tree、crit-bit tree等等。 定义 在计算机科学中,Trie树(前缀树/字典树)是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键

冯·诺依曼 1万+

【数据结构】Trie字典树(前缀树)— 数组实现

字典树(Trie),又称前缀树或单词查找树,是一种树形数据结构。字典树的特点是每个节点代表一个字符,从根节点到叶子节点的路径表示一个完整的字符串(或单词)。字典树主要用于高效地存储和检索字符串集合。字典树的核心思想是通过共享字符前缀来减少存储空间和提高查询效率。例如,如果多个字符串共享相同的前缀(如 “cat” 和 “car” 共享 “ca”),那么在字典树中,这些前缀只会存储一次。假设插入的顺序为:“cat”,“dog”,“door”,“deer”,“pan”,“panda”。就会形成如下字典树。

2301_76606232的博客 1660
上一篇: 找出二叉搜索树任意两不同节点值之间的最小差值
下一篇: 打家劫舍(动态规划)求数组所有非相邻数字的最大和
老邓CODING
博客等级 码龄8年 9粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值