图解:数据结构与算法之字典树
首先,何为字典树(Trie树)?顾名思义,就是在查询目标时,像字典一样按照一定排列顺序标准和步骤访问树的节点,举一个简单例子,英文字典查单词"He",那么第一步你肯定要按照a-z的顺序先找到h这个首字母,然后再按照相同顺序找到e。博主所要介绍的字典树就是类似字典这样的结构。
上述查找单词的过程就是不断查找与所查单词相同前缀的字符串,直至查找到所查单词的最后一个字母。因此,字典树又称为前缀树(prefix Tree)。
以hell、hi、new、nop为例建立一个字典树,构造如下
根据上文所述可以得到字典树的结构性质
根据以上三点来构造字典树。
字典树的构造其实较为简单,和一般树的构造没有太大区别。接下来将对字典树的插入、删除、查询操作进行分析与讲解。
在没有字典树的时候,我们需要先构建出字典树。
以插入hell为例:
再插入单词hit,过程如下,检查=>存在则访问/不存在则建立新节点再访问=>直到要插入的单词到达最后一个字符。
字典树的插入操作比较简单,不需要考虑太多排序问题。
正如上文所说,按照一定的标准进行查询目标字符串,每个节点都储存一个字符,根节点到达子节点路径组成的字符串即为该节点所对应的字符串,那么查询目标字符串时按照从根节点一步一步访问相应字符所在的节点,其实也就是匹配字符串前缀的过程。
如下图,在字典树中,查询"hell",
[图片上传失败...(image-f028c4-1611057619223)]
如果在该字典中查询no
删除操作相对于插入与查询复杂一点,但是也很简单,删除的前提是单词已经存在于字典树。
删除字典树节点的操作需要考虑目标字符串最后一个字符是否是树中的叶子节点。
因为一个单词可能是另一个单词的前缀部分,如果不是叶子节点,我们只需要把该单词的单词标志位清空即可,无需删除整个“树枝”。
比如,想要删除"no"这个单词
比如,想要删除"hell"这个单词,与第一种删除相同,只不过是从最后一个节点,'l'节点是叶子节点,开始往上进行节点删除操作。
比如,想要删除"hi",那么与前两种其实一致,访问到叶子节点'i',删除叶子节点,并向上访问,访问到'h',由于删除'i'以后,'h'依然不是叶子节点,因此不再继续删除节点。
比如,想要删除"nop",与前几种类似,先访问到叶子节点'p'删除,然后上移发现'o'是叶子节点,然而'o'有单词标记位,所以,这里不再继续删除。
有上面几种删除操作,我们得到了删除的标准:
了解了这么多字典树的各种操作,相信你对字典树的用途有个大概了解了,字典树最大作用是用于==字符串的各种匹配==,前缀匹配(模糊搜索),字符串查找(字典)等等。
博主只打出了“涓涓清泉”四个关键字,其搜索列表返回了诸多以涓涓清泉为首的选项
顾名思义,就是一个单纯的字典而已,不多举例。
字典树的构建,通过利用空间换时间的思想以及字符串的公共前缀减少无效的字符串比较操作从而使得插入和查找字符串变得高效.其插入或者查找的时间复杂度为O(n),n为字符串长度。
当然,字典树有着它的弊端,当所插入的单词没有很多公共前缀时,字典树的构建变得十分复杂和低效。
字典树的难度不是很大,但却是一种十分有用的数据结构,掌握之后,对于解决一些有关字符串匹配、公共前缀的问题十分有帮助。
当然我们也说了,字典树有着自己的弊端,由于用空间换时间,如果遇到了一堆公共前缀很少的单词进行字典树构造时,空间需求就显得十分大了。
什么是数据结构和算法
数据结构和算法解释如下:程序等于数据结构加算法;数据结构即数据的逻辑结构;据结构是相互之间存在的一种或多种特定关系的数据元素的集合;包括4类基本的结构,集合,线形结构,树形结构,图状或网状结构;算法指编程过程中完成一件事采用的方法;在编程过程中采用好的算法可以降低程序的时空复杂度。
数据结构与算法完整版 | 超详细图解,看这一篇就够了
数据结构与算法详解:反转链表的全面剖析反转链表是一个常见的数据结构问题,目标是改变每个节点的next指针,使其指向前一个节点。以下是两种主要的解决方案:方法一:迭代法通过迭代,逐个处理节点,存储当前节点(curr)、上一个节点(prev)和下一个节点(next)的指向。具体步骤如下:保存下一个节点的...
算法和数据结构—最全讲解
算法与数据结构的世界,探索其中最全面的奥秘 1. 算法基石:定义与实践 算法是解决复杂问题的指令集合,其核心在于清晰的输入输出定义:问题的初始信息与最终解答。每一条算法都具备可行性,能在有限时间内完成任务,且对于固定的输入,输出总是确定无疑。举个例子,计算1到1000的和,你可以选择逐一相加、...
图解:数据结构与算法之字典树
数据结构中的字典树,一个实用但不太常见的工具,博主最近在解决字节题目时才深入了解。它的工作原理类似英文字典查找单词,即按顺序访问节点直到找到目标字符。字典树,又名前缀树,通过存储字符串的前缀信息,支持高效地进行字符串匹配和查找操作。构造字典树的过程相对简单,插入操作以“hell”为例,先找...
图解:数据结构与算法之字典树
在数据结构和算法的世界里,字典树(Trie树)就像一座迷宫,优雅地解决了字符串匹配的种种挑战。它的核心原理是,每个节点代表一个字符,每个节点的子节点存储不同字符,确保了查找过程按照字典顺序进行。这种设计使得插入、查询和删除操作直观且高效,尤其在前缀搜索和字典查找任务中大放异彩。让我们深入了解...
什么是数据结构和算法?学算法还需要去了解数据结构吗?
1. 数据结构是对数据的组织方式,它不仅涉及内存中数据的排列,还包括了便于操作的数据排列模式,并集成了诸如查找、比较等通用操作的支持。因此,数据结构是算法实现的基础。2. 数据结构包括逻辑结构和存储结构两方面。逻辑结构定义了数据元素之间的关系,而存储结构则反映了数据在计算机硬件中的存放方式。
数据结构与算法(Data structure and Algorithm)
数据结构是数据对象在计算机中的组织方式和及加在其上的一系列操作的总称。完成这些操作所用的方法就是算法。算法(Algorithm):一个有限指令集、接受一些输入、产生一些输出、在有限的步骤之后终止,并且每一条指令应该是有明确的目标、无歧义,在计算机能处理的范围。解决问题方法的效率与数据的组织形式,...
数据结构与算法:学习指导与习题解析内容简介
《数据结构与算法:学习指导与习题解析》这本书是为了支持读者学习数据结构与算法课程而编写的。全书分为14章,其中1至12章详细介绍了课程的核心知识点、学习重点和难点,并对一些知识点进行了扩展,帮助理解和掌握。前13章特别关注了教材中212道习题和53道上机题,从题意分析、常见错误、数据结构、算法...
算法和数据结构的关系
1、数据结构是数据间的有机关系,算法是对数据的操作步骤。没有数据间的有机关系,程序根本无法设计。因为有了数据结构,算法才能诞生。反之,算法又是数据结构得以维持的一个条件,没有算法数据根本无法有规律的打交道,数据之间只会是杂乱无章地碰撞,而数据结构则会消灭。算法是绝对运动的,数据结构是...
【数据结构与算法】链表基本操作|图解
直接操作前驱节点,无需额外分类讨论。设计双链表 双链表在单链表基础上增加反向链接,实现双向遍历。双链表增加节点 在前插法基础上添加反向链接,确保新节点同时在双向链表中的位置正确。双链表删除节点 删除操作与单链表类似,但需同时更新前后节点的反向链接,确保链表结构完整。
木何抗力: 基础类:二叉搜索(排序)树,线索二叉树,哈夫曼树(最优二叉树),二叉堆 平衡树类:AVL,红黑树,2-3树,2-3-4树,B树,B+树,B-树,treap,SBT.优先队列类:左高树(左偏树,可并堆,斜堆),双端堆,斐波那契堆 集合类:并查集 区间树类:线段树,划分树,归并树,树状数组 字母树类:字典树,后缀树.AC自动机算法 动态树类:伸展树 计算几何类:KD-tree (块状树),4叉树 RMQ转LCA:笛卡尔树 图论相关:最小生成树,无根树 其它:败者树,博弈树
华莹市15646628043: 数据结构 二叉树 - ?
木何抗力: 先介绍一下树:1.树的定义 树是一种常见的非线性的数据结构.树的递归定义如下: 树是n(n>0)个结点的有限集,这个集合满足以下条件: ⑴有且仅有一个结点没有前件(父亲结点),该结点称为树的根; ⑵除根外,其余的每个结点都有且仅...
华莹市15646628043: 数据结构与算法 二叉树交换左右子树算法 - ?
木何抗力: 传入树的根结点即可: exchangeLR(&root); //root为树的根节点void exchangeLR(TreeNode *root) {TreeNode *tmp;if (root == NULL)return;// 左子树交换exChangeLR(root->left);// 右子树交换exChangeLR(root->right);// 交换当前结点的左右子树tmp = root->left;root->left = root->right;root->right = tmp; }
华莹市15646628043: 数据结构知识归纳?
木何抗力: 第一章:数据结构概述 一、什么是数据结构 1、作者开篇谈到: 一般来说解决一个具体的问题时,大致需要经过下列几个步骤:首先要从具体的问题抽象出一个适当的数学模型,然后设计一个解此数学模型的算法,最后编写出程序代码,进行...
华莹市15646628043: ACM进阶指南?
木何抗力: 大一上学期: 必学: 1.C语言基础语法必须全部学会 a)推荐“语言入门”分类20道题以上 b)提前完成C语言课程设计 2.简单数学题(推荐“数学”分类20道以上) 需要掌握以下基本算法: a)欧几里德算法求最大公约数 b)筛法求素数 c)...
华莹市15646628043: 数据结构与算法中,树一般会应用在哪些方面?为什么 - ?
木何抗力: 首先,有一些实际场景中的数据,天然地就是树结构.凡是符合每个对象有一个上级,多个下级的性质,就可以用树建模.比如管理树(老板和员工),家族树(父亲和孩子),文件系统树(文件夹和文件).另外,二叉搜索树(BST)可以比较高效地对数据进行排序.如果需要维护动态增减且要保持顺序的一组数据,就可以用BST.
华莹市15646628043: 计算机二级公共基础简单不?
木何抗力: 全国计算机二级考试的话,怎么说呢?说难的同学是因为不复习不下苦功,说容易的同学是因为下了苦功努力过.所为为谓仁者见仁,智者见智.不过总的来说还是比较简单的,只要你肯努力,多做习题多看书就行了,另外推荐这个网站,有很...
华莹市15646628043: 数据结构与算法分析 - ?
木何抗力: 书上写的挺简单,不过要用到实际中去就困难了,这是最基本的东西是以后学习计算机的基础,就像大一要学习高数 大物一样,是一门基础课程~至于学到什么程度就看你自己对自己的要求啦! (一)基本概念和术语 1.数据结构的概念 2.抽象...
华莹市15646628043: 数据结构与算法中树边是什么概念 - ?
木何抗力: 数据结构是计算机存储、组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率.数据结构往往同高效的检索算法和索引技术有关. 数据结构在计算机科学界至今没有标准的定义.个人根据各自的理解的不同而有不同的表述方法:
华莹市15646628043: 算法与数据结构的关系是什么 - ?
木何抗力: 算法是一种思想; 数据结构是一种属性.