再谈Trie-字典树

字典树trie详解 trie 简介 在计算机科学中,trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。 Trie这个术语来自于retrieva... 阅读详情

前面我已经写了两篇关于字典树的博客,主要说的是动态建立字典树,详情请看:

http://blog.youkuaiyun.com/monkey0le/article/details/8095918

http://blog.youkuaiyun.com/monkey0le/article/details/8096105

由于动态的字典树需要动态申请内存,而且每一组测试数据用完后都需要释放内存,很容易会造成泄漏和非法访问内存等一系列问题,今天看了lrj的《算法竞赛入门经典——训练指南》,里面说的字典树是静态的,感觉和静态链表有异曲同工之妙,放上来和大家分享一下:

首先需要一个二维数组ch[i][j]保存结点i的那个编号为j的子结点。感觉好像有点抽象,下面画个图给大家就明白了。

假设给出一个字符串集合{a,to,tea,ted,i,in},下面的就是构建的字典树:


如上图,红色的数字代表的就是i,j对应的就是i那个结点的字符减去‘a’字符得到的编号,三角形就代表一个单词的结束。ch[i][j]代表的就是该结点对应的孩子结点的位置。

lrj的代码只给出了插入的,很容易就可以写出查询的代码:

struct Trie {
	int ch[maxnode][sigma_size];
	int val[maxnode];		//附加信息
	int sz;					//节点总数
	Trie () {sz = 1; memset (ch[0], 0, sizeof (ch[0])); }		//初始化
	int idx (char c) { return c - 'a';}

	void insert (char *s, int v)
	{//插入字符串s,附加信息为v,v不为0
		int u = 0,n = strlen (s);
		for (int i = 0; i < n; i++)
		{
			int c = idx (s[i]);
			if (!ch[u][c])
			{//节点不存在
				memset (ch[sz], 0, sizeof (ch[sz]));
				val[sz] = 0;		//中间节点附加信息为0
				ch[u][c] = sz ++;	//新建节点
			}
			u = ch[u][c];			//往下走
		}
		val[u] = v;					//字符串的最后一个字符的附加信息为v
	}

	int Search (char *s)		//查找字符串s,返回附加信息
	{
		int u = 0, n = strlen (s);
		for (int i = 0; i < n; i++)
		{
			int c = idx (s[i]);
			if (!ch[u][c])
			{//节点不存在
				return 0;
			}
			u = ch[u][c];
		}
		return val[u];
	}
};


原来以为(Trie)字典树很难,后来发现不久这么一回事嘛 字典树 牛逼 什么是字典树 字典树,是一种空间换时间的数据结构,又称Trie树、前缀树,是一种树形结构(字典树是一种数据结构),典型用于统计、排序、和保存大量字符串。所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 可能大部分情况你很难直观或者有接触的体验,可能对前缀这个玩意没啥概念,可能做题遇到前缀问题也是暴力匹配蒙混过关,如果字符串比较少使用哈希表等结构可能也能蒙混过关,但如果字符串比较长、相同前缀较多那么使用 阅读详情

相关推荐

快乐学算法之:字典树Trie

字典树的英文名叫做Trie,取自retrieval,也就是检索的意思。它是一种特殊的树状结构,可以进行快速的字符插入和字符串搜索,特别适用于文本搜索和词频统计等应用方面。 本文将会详细介绍字典树Trie的特性。

程序那些事 9057

Doris 基于 Hive 表的全局字典设计与实现

我们在业务上需要OLAP引擎能够⽀持精确去重的预计算,但这个需求本身是不是合理的呢? 目前线上数据分析会有一些与⾦钱相关的计算,比如某一个业务方要计算他们个人的销售业绩、以及一些广告的点击率等,这些能够转化为金钱的计算需求是要求精确去重的,近似去重是⽐较难以容忍的。

SmartSi 1348

Window10 intel realsense D435安装并实现opencv显示realsense读取的彩色和深度数据(QT+openCV+rsD35)

(1)点击"官方指南" 来到下载页,-&gt;最新的稳定版本发布 (本人下的2.16.5,现在最新2.17.0) 不需要做开发,只要下载Intel RealSense Viewer就好,这个就是相机的可视化界面,简洁明了。对应的安装包是Intel.RealSense.Viewer.exe。 本人的毕设要用到深度图做开发,所以安装Intel.RealSense.SDK.exe,SDK...

Pabebe的博客 1万+

Trie树(字典树)的实现

1. Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基本性质: 1.根节点不包含字符,除根

腾先生的技术工坊 734

3D视觉-激光三角测量法的概述和原理

激光三角法位移测量的原理是,用一束激光以某一角度聚焦在被测物体表面,然后从另一角度对物体表面上的激光光斑进行成像,物体表面激光照射点的位置高度不同,所接受散射或反射光线的角度也不同,用。激光三角测量法是一种通过图像采集系统采集被测物表面漫反射的激光轮廓,进而基于设备已知的相对位置通过算法处理,获得被测物表面的三维轮廓数据,进而还原目标物体三维空间信息的方法。采用激光三角原理和回波分析原理进行非接触位置、位移测量的精密传感器, 广泛应用于位置、位移 、厚度、半径、形状、振动、距离等几何量的工业测量。

qq_20660115的博客 3919

使用moveit控制机械臂

位置设置:`target_pose.position.x = 0.12`, `target_pose.position.y = 0.41`, 和 `target_pose.position.z = 0.44` 分别设置了机械臂末端执行器的X, Y, 和 Z坐标。设定目标位置:`group.set_pose_target(target_pose)` 这一命令将之前定义的目标位置和姿态设置为当前机械臂组的目标,为接下来的路径规划做准备。在机械臂控制的过程中,设定精确的目标位置和姿态是实现精确操作的关键步骤。

realman_Rop的博客 3687

字典树(Trie树)的实现及应用

一、字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。与二叉查找树不同,Trie树的键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对...

weixin_34258782的博客 428

Kriging代理模型理论相关推导

代理模型,Kriging,加点准则

森屹的博客 1万+

生产实践中的经典算法(四)-BitMap

生产时间中的经典算法(四)-BitMap 1.BitMap的原理 位图(Bitmap),即位(Bit)的集合,是一种数据结构,可用于记录大量的0-1状态,在很多地方都会用到,比如Linux内核(如inode,磁盘块)、Bloom Filter算法等,其优势是可以在一个非常高的空间利用率下保存大量0-1状态。 如何表达1,2,4,6存在:在相应的下标位置将其设置为1,不存在的位设置为0,进而:如何表达8,10,14存在?只需要再开一位 java中的8种基本类型的字节数: 2.BitMap一些常见应用场景

wat1r的博客 4730

LTSPICE使用教程:入门指导

LTSPICE仿真工具入门指导

焊武大帝的专栏 5万+

Python 爬虫实战:在房天下抓取房产信息,分析房价走势

通过本次 Python 爬虫实战,我们成功地从房天下爬取了房产信息,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分区域的房产数据,且未对房产的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多区域的房产数据,并深入分析房产的多媒体内容、用户行为模式等,为购房者和房地产从业者提供更有价值的数据支持。

u014481728的博客 1367

Trie 字典树 详解

一、字典树 1.字典树简介 字典树,英文名Trie,如其名:就是一棵像字典一样的树。 我们首先通过一张图来理解字典树的结构: 我们假定结点的顺序按照图中给定的顺序进行编号,容易发现,在一个给定的树上,从每个根节点出发到达子节点的路径边代表一个字母。实际上,每个节点出发的几条边所代表的字母是从左到右的顺序按照字典序排列的。 那么我们可以知道:从根节点出发,到达某个指定的结点的路径可以构成一个字...

HeartFireY的博客 6370

VSCode PlantUML 插件超详细教程:从安装配置到实战绘图全流程

VSCode PlantUML 插件超详细教程:从安装配置到实战绘图全流程

weixin_69237381的博客 911

再谈大量数据去重:字典树(Trie)和外排序(External Sorting)

空间、时间是一对孪生兄弟。算法道路上,大家都有一个共识,“时空"可以互换。有没有办法利用更多的时间来换取有限内存下的大量数据去重呢?今天我们再来一探究竟。

zdxiq000的专栏 1577

置顶必读(1) |《YOLOv11实战:从入门到深度优化》专栏导读,带你一文了解本专栏!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 12万+

jre9下载 jdk9

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

字典树(Trie/前缀树)

Trie 字典树 前缀树

good good study, day day up! 7867

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

字典树Trie

字典树字典树——Trie树,又称为前缀树(Prefix Tree)、单词查找树或键树,是一种多叉树结构。

一只程序猿 9729

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Trie字典树详解

Trie树,又叫字典树,前缀树(Prefix Tree),单词查找树,是一种多叉树的结构.上图就是一颗Trie树,表示了关键字集合根节点不包含字符,除根节点外每一个节点都只包含一个字符从根节点到某一节点,路径上的字符连接起来,为该节点对应的字符串每个节点的所有子节点包含的字符都不相同.算法核心:利用字符串的公共前缀来减少查询时间,最大限度的减少无畏字符串的比较.单词检索统计和排序字符串字符串前缀搜索我们来看一个场景:当我们在浏览器的搜索框中打出一个字符串的前缀时,它便实时的单词自动补齐.对于。

smf12138的博客 2322

字典树(Trie) 详解

字典树(Trie),又称为或,是一种用于高效和字符串集合的数据结构,特别适合处理大量字符串的前缀匹配问题。它是一种结构,每个节点代表一个字符串的字符。以为例。下面是一个简单的的实现。它代表中的一个节点,用于存储字符和状态信息。依次插入 “apple”, “bana”​。

qq_55264624的博客 1718

trie树(字典树)

字典树(Trie),也称为前缀树或单词查找树,是一种用于存储字符串集合的数据结构,特别适用于处理前缀相关的问题。字典树的基本特点是通过共享公共前缀来节省存储空间,并且可以高效地进行字符串查询操作。

buaichifanqie的博客 1657

Trie树(字典树)

1. Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 它有3个基本性质:

jiutianhe的专栏 2万+

trie(字典树、前缀树)

trie(字典树、前缀树) 1. trie原理 原理 trie树,又被称为字典树、前缀树,是一种高效地存储和查找字符串集合的数据结构。 一般来说,用到trie的题目中的字母要么全是小写字母,要么全是大写字母,要么全是数字,要么就是0和1。也就是说字母的个数不是很多。 如下是一个trie树的例子: 真实存储中,图中的每个字符都是被存储在边上的,节点是不存储字符信息的。 查询某个字符串S是否在这个字符串集合中是否存在的话,可以从根开始遍历,当遍历到空节点或者S已经遍历结束但是trie树中对应节点不是

weixin_42638946的博客 3664

Trie树(字典树)

Trie树,也叫做字典树,是一种树形结构。往往用于统计和排序大量的字符串前缀来减少查询时间,最大限度的减少字符串比较。 Trie树的核心便是用空间来换取时间,而Trie在算法中也往往采用数组来进行模拟,利用字符串的公共前缀来降低查询时间来达到提高效率的目的。 下面这个图便是字典树。 建立的字典树的流程便是 如何查询 查询的流程其实跟插入差不多。 推荐例题 题目链接给定 nnn 个模式串 s1,s2,…,sns_1, s_2, \dots, s_ns1​,s2​,…,sn​ 和 qqq 次询问,每次询问给定

congyuyoudao的博客 1080

Trie(字典树)

本文主要介绍了 Trie(前缀树/字典树)这一高效存储和检索字符串集合的树形数据结构,并给出相关实现~

2201_75479723的博客 1210

[c++算法] 字典树 Trie 详解

哈喽大家好,我是doooge,今天给大家带来Trie的详解。字典树Trie详解。

doooge_awa的博客 1218

简记字典树Trie

《简记字典树Trie》   Trie也称字典树、单词查找树或键树,是一种树形结构。典型的应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。其优点是最大限度的减少无谓的字符串比较,查询效率比哈希表高。 Key Words:字典树、构建字典树、字典树的应用 Beijing, 2020 作者:RaySue Agile Pioneer   文章目录树的回顾字典树(Trie)Trie的基本性质Trie的核心思想Trie基本的功能插入字符串 (inser.

雄关漫道真如铁 而今迈步从头越 4638
上一篇: 拓扑排序优化
下一篇: 解题报告-HDU 2892 (计算几何)
WellerZhao
博客等级 码龄15年 11粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值