前缀树数据结构及构造算法一览

算法基础:前缀树(Trie tree、字典树) 算法成神之路:前缀树(Trie tree、字典树) 阅读详情

前缀树,也叫字典树,是一种树形结构,是哈希树的变形。典型应用用于统计和排序大量的字符串,当然不仅限于字符串,常用于文本词频的统计。

它的优点是:利用字符串的公共前缀来减少查询时间,最大限度的减少无谓的字符串比较。

Trie树的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销,以达到提高效率的目的、

前缀树的3个基本性质:

1.结点上不含有字符,字符视为都在传递路径上。

2.从根结点到某一个结点,路径上经过的字符连接起来,为该节点对应的字符串。

3.相同的字符串有且只有一个路径。

TrieNode结点:

class TrieNode
{
public:
    TrieNode()
    {
        pass=0;end=0;children.resize(26);
    }
    int pass;//表示以该字符为前缀的字符串数量
    int end;//以当前字符结尾的字符串数量
    vector<TrieNode*> children;//子节点
};

前缀树的构建

class Trie {
public:
    TrieNode* root;
    Trie() {
        root=new TrieNode();
    }
    
    void insert(string word) {
        TrieNode* node=root;//获得根节点
        int index=0;//建立字符索引号
        node->pass++;//当前结点pass值++;
        for(int i=0;i<word.length();++i)
        {
            index=word[i]-'a';//拿到字符索引
            if(node->children[index]==nullptr)//如果说该索引下无节点,那么就创建它
                node->children[index]=new TrieNode();
            node=node->children[index];//结点运动到子节点位置
            (node->pass)++;//结点的pass值++
        }
        (node->end)++;//最终的结点的end值++;
    }
    //搜索字符串是否存在
    bool search(string word) {
        TrieNode* node=root;//获得根节点
        int index=0;//建立字符索引号
        for(int i=0;i<word.length();++i)
        {
            index=word[i]-'a';
            if(node->children[index]==nullptr)//如果发现某个字符索引下无节点,
//那太好了,直接false
                return false;
            node=node->children[index];//跟下去
        }
        if(node->end!=0)//跳出循环一定是字符串循环完了,就看下当前结点的end值是否为0,
//为0,说明没有字符串以该字符结尾,返回false
            return true;
        else
            return false;
    }
    
    //查找某字符串是否存在或者是否为前缀字符串
    bool startsWith(string prefix) {
        TrieNode* node=root;//获得根节点
        int index=0;//建立字符索引号
        for(int i=0;i<prefix.length();++i)
        {
            index=prefix[i]-'a';
            if(node->children[index]==nullptr)
                return false;
            node=node->children[index];
        }
            return true;
    }
};

Huffman树(哈夫曼树)、哈夫曼编码、最优前缀码、前缀码 目录 基本概念: 哈夫曼树的构造 哈夫曼树的应用——哈夫曼编码 附:前缀码 基本概念: 需要了解的一些基概念: 路径:结点序列满足是的双亲。 路径长度:路径的分支数。L=k-1 扩充二叉树:在一般二叉树中,将原来的每个空指针都指向一个特殊的结点——外结点,这样的二叉树称为扩充二叉树。 内结点——原来二叉树中的结点。 结点个数S=内结点个数+1 树的内路径长度:从根结点到各个... 阅读详情

相关推荐

【数据结构】- 详解哈夫曼树(用 C 语言实现哈夫曼树的构造和哈夫曼编码)

一、哈夫曼树的基本概念 二、哈夫曼树的构造算法(用 C 语言实现) 三、哈夫曼编码(用 C 语言实现)

melonyzzZ的博客 6752

算法 - 前缀树

目录 一、前缀树含义 二、代码实现 (一)前缀树实现 方式一: 方式二: (二)暴力实现 一、前缀树含义 前缀树:把一个“最小”单位的数据看成一个节点到另一个节点的路径,每个节点有两个属性,一个是所有数据经过这个节点的次数pass,一个是这个节点作为结束位置的次数end。 例如,一个数组["abc","abd","ab","kst"],看它怎么用前缀树表示: (1)首先有一个节点,指向null (2)看"abc",怎么生成前缀树 a.首先是a,第一个节点没有a路径,先生成a.

weixin_40459875的博客 2115

实现 Trie (前缀树) 算法讲解

Trie 树,也叫前缀树,是一种树形数据结构 ,主要用于高效地存储和检索字符串数据集中的键。它的优势在于利用字符串的公共前缀来减少查询时间,提高效率。在诸如自动补全、拼写检查等场景中有着广泛应用。

ly1379223878的博客 1389

【数据结构】前缀树(trie)

学习了解前缀树的基本概念、基本性质和前缀树的相关应用场景,学习前缀树的结构,以及前缀树的相关方法,包括前缀树的添加、查询、删除等方法,并通过相关例题来强化巩固自己的学习

ls199848的博客 2679

【算法】—— 前缀树实现查找词

目录 什么是前缀树? 构造前缀树 查找 代码实现 题目:有n个词,数据量800G,如何查找某个词是否存在? 例如: ”abc“ ”abcjk“ ”abcdefg“ ”我是一个小乖乖“ ”123456“ ”122678“ …… 查找”abc“ 、”111111“ 两个词是否存在,考虑时间复杂度 前缀树来实现 什么是前缀树? 前缀树又名字典树,单词查找树,Trie树,是一种多路树形结构,是哈希树的变种,和hash效率有一拼,是一种用于快速检索的多叉树结构。 典型应用是用于统计

许小乖……是总攻 1179

贪心算法与数据结构结合4——最优前缀码及哈夫曼算法

我曾经和不少做独立游戏的人交流过。讲实话18年是国产游戏的兴盛期,这就激励了一大批想做游戏的人,和一大批独立游戏开发者的人开始不惜金钱、时间等代价开发游戏。当然他们也做出了很大的成功。 这一行大部分都是数媒专业,或者不断自学研究出来的东西。 现在的国家形式,当游戏开发人,做独立游戏真的是一种莫大的勇气。 游戏人去做游戏,为游戏产业做贡献。不单单是为了自己,还是为了国家,就是想拿出来一款可以称得上、...

qq_41926985的博客 3936

算法【前缀树】

注意:学习本篇最少应知道什么是树结构和哈希表怎么用。前缀树又叫字典树,英文名trie。每个样本 都从头节点开始 根据 前缀字符或者前缀数字 建出来的一棵大树,就是前缀树。没有路就新建节点;已经有路了,就复用节点。前缀树的使用场景:需要根据前缀信息来查询的场景前缀树的优点:根据前缀信息选择树上的分支,可以节省大量的时间前缀树的缺点:比较浪费空间,和总字符数量有关,字符的种类有关。

W_O_Z的博客 1624

Cesium进阶学习四、shadertoy(着色器)

Cesium进阶学习着色器

程迷学习的博客 4322

算法--前缀树

前缀树上面的每一个节点,都可以有很多个子树,通往不同子树的路径上的字符串也不同。通常用于保存字符串,以及查询字符串,通过前缀相同来减少查询时间。 前缀树首先要有一个根节点。假设我需要存储三个字符串分别是"abc" "abd" "bcd"。 开始的时候根节点没有通向a的路径于是根节点创建出一条通向'a'的路径 到达下一个节点之后发现没有通向‘b’的路径于是再创建路径。后面是一样的 最后就是一个这样的图。 每个节点中包含一个集合,集合中表示它可以通向的下一个节点,也就是路径。如果增加字符.

niceYF的博客 912

直流无刷BLDC六步换相“电流环”、“速度环”的关系

4、在电流闭环模式下,电机的电流严格按给定电流运行,负载大小变化时,电流不变,电机速度跟随负载非正常变化,例如速度严重“超速”时,需要“限速”保护,这个任务是“速度环”的,这时“速度环”会根据设定的速度上限,控制触发器,将电机速度迅速将下来,电流降下来,在“限速”保护期间,“电流环”失去对触发器的控制作用;3、在电流闭环模式下,电机的电流严格按给定电流运行,负载大小变化时,电流不变,电机速度跟随负载正常变化,“速度环”对速度大小的控制作用是没有的;6、很多人想当然,“电流环”不工作,电机“电流”哪里来的?

u011878611的博客 5471

QT快速配置MSVC2017编译环境(3分钟极简指南)

本文提供了一份3分钟极简指南,帮助开发者快速配置QT的MSVC2017编译环境。通过断网安装、精准勾选组件和配置QT Creator编译器路径等步骤,大幅提升QT开发效率。MSVC2017作为Windows平台高性能C++编译器,特别适合处理大型QT项目,编译速度优势明显。

weixin_30399821的博客 504

【数据结构与算法】前缀树的实现

Trie(发音类似 “try”),被称为前缀树或字典树,是一种树形的数据结构,可用于高效地存储和检索字符串数据集中的键。这个数据结构有相当多的应用情景,例如自动补完和拼写检查。

joy.728的博客 1866

自定义串口通讯协议

自定义串口通讯协议的实现方法

qq_44826038的博客 2172

前缀树算法篇:前缀信息的巧妙获取

一文帮组你掌握前缀树算法的原理以及应用!

努力努力再努力wz的博客 1万+

UE4 专用服务器搭建(UE4.27为例)

专用服务器、DS服务器

mimo134的博客 2775

金融数据自动化:从同花顺API到Excel的智能转换之旅

本文详细介绍了如何利用同花顺API实现金融数据自动化处理,并将其智能转换为Excel格式的全流程。通过Python编程和Excel高级技巧,读者可以掌握从数据获取、清洗到输出的完整解决方案,大幅提升金融数据分析的效率和准确性。文章特别强调了同花顺API的使用技巧和Excel自动化输出的最佳实践。

sql99的博客 462

数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!

重复循环"爸爸去哪儿"这个过程

weixin_75202470的博客 1万+

电影台词预测类型:NLP小样本多标签分类实战

电影类型预测本质上是短文本语义建模问题,核心在于从高度碎片化、低语义密度的台词(平均仅12.7词)中挖掘隐含的类型学编码规则。其技术难点在于:需应对省略主语、倒装、拟声词等非规范表达;处理Drama与Comedy等类型强共现的多标签耦合;并克服领域迁移障碍——维基文本预训练模型在台词上性能骤降0.11。解决方案聚焦RoBERTa微调、类型感知注意力机制与标签平滑策略,兼顾小样本鲁棒性与业务可解释性,广泛适用于影视元数据标注、智能推荐系统及NLP教学实践。

weixin_33309048的博客 288

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

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

haolexiao的专栏 8453

AutoSAR系列讲解(入门篇)2.4-Runnables可运行实体

讲解一下Runnable和其工程的实际映射

雪云飞星的博客 3万+

Camera2Demo

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

前缀树详解-Java版

文章目录前言一、前缀树介绍一、前缀树的表示1、数组2、Map二、插入总结 前言 今天在做算法题的时候,遇到了一道用到前缀树这种数据结构的题目,借此机会,写篇博文,记录一下前缀树到底是什么? 一、前缀树介绍   前缀树(字典树)是N叉树的一种特殊形式。通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。子节点代表的字符串是由节点本身的原始字符串,以及通往该子节点路径上所有的字符组成的。 例如,现在我要存储字符串[“Y

乐无声的博客 2886

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数据结构与算法 - 前缀树

什么是前缀树 前缀树一般就是根据给的一个字符串构造一棵树,不同字符串继续构造树,也就是添加路径与节点 前缀树的用途 1 找有多少个字符串是以给定的字符串为前缀 2 添加过多少个某个给定的字符串 … 怎么实现一个前缀树 比如给一个“abc” 我们怎么构造一个前缀树呢?首先我们逻辑上把每个字符放在树的边上,节点存储很多的我们需要的数据项(比如说节点可以存储添加的时候字符走过多少次,依据需求自行添加...

刷穿算法!!!! 248

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【图解算法】Trie树

Trie树,字符串查找树

就爱摆烂 5160

后端面试常见数据结构1——前缀树(Prefix Tree)

前缀树(Prefix Tree)1、背景2、定义3、特点4、构造4.1、实现 Trie (前缀树)——力扣 2084.2、Trie ——文本词频统计参考 1、背景 节点所有的后代都与该节点相关的字符串有着共同的前缀。这就是前缀树名称的由来。 对于一个字符串数据,我们要从查找某个字符串是否出现过,或者其中以“hell”开头 ,或者以"ive"结尾的字符是否出现以及出现的个数等等操作。我们只需要在定义前缀树的时候加上相应得数据项就可以了。 2、定义 前缀树是N叉树的一种特殊形式。通常来说,一个前缀树是用来

JMW1407的博客 1252

Mysql前缀树_前缀树 - 一种好玩的树型数据结构

上篇内容有在介绍 Gin 的路由实现时提到了前缀树,这次我们稍微深入探究一下前缀树的实现。本文以一道编程题为例,讲述前缀树的实现,以及前缀树的一种优化形态压缩前缀树。MapSum 问题LeetCode 上有一道编程题是这样的实现一个 MapSum 类里的两个方法,insert和sum。对于方法insert,你将得到一对(字符串,整数)的键值对。字符串表示键,整数表示值。如果键已经存在,那么原...

weixin_35131425的博客 329

前缀树(trie)实现

目录简介性质算法思路插入字符串查找前缀代码实现实现类测试类测试结果参考文档 简介 前缀树(trie)又称字典树、单词查找树。它由字符串键中的所有字符构造而成,允许使用被查找键中的字符进行查找。它的英文单词 trie 来自于 E.Fredkin 在 1960 年玩的一个文字游戏,因为这个数据结构的作用是取出( retrieval)数据,但发音为 try 是为了避免与 tree 相混淆。 性质 和其它查找树一样,单词查找树也是由链接的结点所组成的数据结构,这些链接可能为空,也可能指向其他结点。每个结点都只可能有

qq_39559641的博客 2703
上一篇: OpenCASCADE基本建模环境
Worthwhile_HUST
博客等级 码龄5年 53粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值