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

算法基础:前缀树(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

【AMD显卡在WIndow10/11部署带GPU支持的深度学习环境(Pytorch-DirectML篇)】

这篇是之前Tensorflow-DirectML的姊妹篇,如果对TF感兴趣的可以搜索我的博文。 首先我们丢一个官网地址,但是官网那个会误导新人如果你按那个操作的话。 https://docs.microsoft.com/en-us/windows/ai/directml/gpu-pytorch-windows 这里用我的方法操作: 首先声明一下,因为我的显卡是AMD RX6600,不带XT(性能和RTX3060 12G版本半斤八两),所以目前没有最新的WSL2驱动,如果有了的话欢迎告知我,所以我这里就.

weixin_44029053的博客 2万+

算法--前缀树

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

niceYF的博客 912

VS(QT)调用Matlab函数的方法

调试–>窗口–>异常设置–>Win32 Exceptions全部不要勾选。选择Microsoft Visual C++ 2017。将生成的.h和.lib分别放置在对应的文件夹。输入mex -setup C++输入deploytool选择。选择Realse x64。

woshigaowei5146的博客 591

ANSYS Fluent DPM实战:从单点到锥形注入的粒子模拟全流程解析

本文深度解析了ANSYS Fluent中离散相模型(DPM)的粒子注入(Injection)设置全流程。从单点注入到锥形喷雾,详细阐述了不同注入类型的物理本质、参数逻辑与适用场景,并提供了粒径分布、湍流扩散等高级参数设置技巧与实战避坑指南,帮助工程师精准模拟喷雾、粉尘等粒子运动行为。

weixin_29276847的博客 654

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

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

joy.728的博客 1866

从零构建MAVLink通信:PX4飞控与QGC的协议握手全解析

本文详细解析了PX4飞控与QGC地面站通过MAVLink协议进行通信的全过程,重点介绍了航点传输协议的状态机设计、INT类型消息的优化优势以及异常处理与调试技巧。通过实战案例和性能优化建议,帮助开发者高效构建无人机通信系统,提升数据传输效率与稳定性。

weixin_29209805的博客 505

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

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

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

SpringBoot项目启动后ShardingSphere5.0首次SQL查询慢?这个预热技巧帮你搞定

本文针对SpringBoot项目集成ShardingSphere 5.0后首次SQL查询慢的问题,深入剖析了其根源在于SQL解析引擎的懒加载与缓存初始化。文章提供了三种有效的预热技巧,包括精准的SQL解析引擎预热、简单查询触发全链路预热以及可配置的生产级方案,帮助开发者将初始化成本提前至应用启动阶段,从而消除性能毛刺,提升用户体验与系统稳定性。

chair的专栏 1062

量化策略分享之首板低开

这个量化策略的核心是选择在低位、首次涨停后次日低开的股票,开盘时买入,上午有盈利就卖出,没有就拿到尾盘在卖出;策略优点在于选择的股票在低位,风险较低,并且刚启动首板,有大资金介入,第二天能快速跑路。

qq_29301281的博客 1467

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

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

weixin_75202470的博客 1万+

python进行windows系统UI自动化之【pyautoit】

一般以我们平时操作,会从下图上方的地址栏进行操作,这里注意可以直接从下方的文件名处,输入对应的绝对地址,如:F:\程序设计书籍\《啊哈!pyautoit 是一个用python写的基于AutoItX3.dll的接口库,用来进行windows窗口的一系列操作,也支持鼠标键盘的操作。点击上访的图标,进行拖拉,到想访问的位置,注意下图两个红框中的数值,上面的框表示页面的标题和类,下面的框表示控件的类和序号(一般连起来使用)打开Auto Window Info(x64)或Auto Window Info(x86)

weixin_43936332的博客 9315

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

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

haolexiao的专栏 8453

用miniconda建立PyTorch、Keras、TensorFlow三个环境

如果还没有安装Miniconda,请从[Miniconda官网](https://docs.conda.io/en/latest/miniconda.html)下载合适的版本并进行安装。如果遇到问题,可以通过编辑`~/.condarc`文件来临时禁用某个源,或者通过`conda config --remove channels`命令来移除配置的镜像源。要切换到不同的环境,先使用`conda deactivate`命令退出当前环境,再用`conda activate 环境名称`命令激活另一个环境。

数字人生 2464

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

前缀树详解-Java版

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

乐无声的博客 2886

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据结构与算法 - 前缀树

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

刷穿算法!!!! 248

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【图解算法】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、付费专栏及课程。

余额充值