数据结构 : 树的分类及在数据库索引中的运用

文章目录

    • 一 :树的分类
      • 1、二叉树(Binary Tree):
      • 2、二叉搜索树(Binary Search Tree, BST):
      • 3、平衡二叉树:
      • 4、字典树(Trie):
      • 5、多叉树(Multiway Tree):
    • 二、二叉搜素树
      • B树:
      • B+树:
      • 红黑树:
    • 三、字典树和平衡二叉树
      • 字典树(Trie树)的原理:
      • 平衡二叉树的原理:
      • 区别
      • 应用场景:
    • 三、数据库索引
      • 1、树在数据库索引中的作用
      • 2、Oracle、Mysql 、Postgresql 索引所运用的树原理

一 :树的分类

1、二叉树(Binary Tree):

每个节点最多有两个子节点,通常称为左子节点和右子节点。
是许多其他树结构的基础,如二叉搜索树和平衡二叉树。
应用广泛,包括排序、搜索、表达式解析等。

2、二叉搜索树(Binary Search Tree, BST):

二叉树的一种特殊形式,其中左子节点的值小于父节点,右子节点的值大于父节点。
提供了高效的插入、删除和搜索操作,但最坏情况下可能退化为链表。
适用于需要频繁插入、删除和搜索的场景。

3、平衡二叉树:

包括AVL树、伸展树等,它们通过旋转和重新平衡操作来保持树的平衡。
平衡二叉树确保树的高度保持在对数级别,从而保证了高效的搜索性能。
适用于需要频繁搜索、插入和删除的场景,特别是在数据动态变化的情况下。

4、字典树(Trie):

又称前缀树或键树,用于存储关联数组,其中键通常是字符串。
每个节点代表字符串的一个字符,从根到叶子的路径表示一个完整的字符串。
适用于快速检索具有公共前缀的键,如字符串搜索、自动补全等。

5、多叉树(Multiway Tree):

每个节点可以有多个子节点,不像二叉树那样仅限于两个。
多叉树根据具体的定义和用途可以有不同的形式,如k叉树等。
适用于需要表示具有多个子元素的数据结构,如文件系统的目录结构。

二、二叉搜素树

B树:

查询时间复杂度:O(log n)
B树是一种平衡的多路搜索树,其中每个节点可以包含多个键和子节点。查询操作从根节点开始,根据键的值在子树中进行选择,直到找到所需的键或确定键不存在。由于B树的高度与数据量的对数成正比,因此查询操作的时间复杂度为O(log n)。

B+树:

查询时间复杂度:O(log n)
B+树是B树的扩展,其主要区别在于所有键都存储在叶子节点中,而内部节点仅作为索引使用。这种设计使得B+树在范围查询和磁盘存储方面更加高效。尽管结构有所不同,但查询操作的基本过程与B树相似,因此查询时间复杂度也为O(log n)。

红黑树:

查询时间复杂度:O(log n)
红黑树是一种自平衡的二叉搜索树,它通过颜色和特定的调整规则来保持树的平衡。在红黑树中,每个节点都有一个颜色属性(红色或黑色),并且满足一系列属性以确保树的平衡。查询操作在红黑树中按照二叉搜索树的方式进行,因此时间复杂度为O(log n)。

三、字典树和平衡二叉树

字典树(Trie树)的原理:

字典树,也称为Trie树或前缀树,是一种树形结构,用于高效地存储和检索字符串数据集中的键。它的主要原理是利用字符串的公共前缀来组织数据,以减少查询时间。在Trie树中,一个节点表示一个字符串(或前缀)的一个字符,从根节点到任意一个节点的路径就表示一个字符串或前缀。

每个节点包含一个字符,并且除根节点外,每个节点都有一个指向其子节点的指针数组。
如果一个字符串在Trie树中,那么从根节点开始,沿着表示该字符串的字符路径,可以到达一个表示字符串末尾的节点(通常用一个特殊标记来表示)。
查询操作是从根节点开始,沿着与查询字符串相对应的字符路径进行遍历,直到找到目标节点或确定该字符串不存在。

平衡二叉树的原理:

平衡二叉树(如AVL树)是一种自平衡的二叉搜索树,它的主要原理是保持树的平衡,以确保查询、插入和删除操作的时间复杂度接近O(log n)。

在平衡二叉树中,任何节点的两个子树的高度差不会超过1,这有助于防止树出现倾斜,从而保证树的高度相对较低。
平衡二叉树通过旋转操作来维持其平衡性。当在树中插入或删除节点导致树失衡时,会触发旋转操作来调整树的结构,使其重新达到平衡状态。
旋转操作包括单旋转(左旋或右旋)和双旋转(左右旋或右左旋),具体旋转方式取决于失衡节点和其子节点的相对高度以及插入或删除操作的位置。
平衡二叉树的旋转操作和高度平衡的特性是其高效性能的关键。通过保持树的高度相对较低(接近log n),平衡二叉树能够在O(log n)的时间复杂度内完成查询、插入和删除操作。

总的来说,字典树和平衡二叉树都是高效的数据结构,它们在不同的应用场景中发挥着重要作用。字典树适用于具有公共前缀的字符串存储和查询,而平衡二叉树则适用于需要频繁进行插入、删除和查询操作的场景,且要求这些操作的时间复杂度尽可能低。

区别

字典树(Trie树)和平衡二叉树(如AVL树)在数据结构、性质和应用场景上都有着显著的区别。

数据结构与性质:
字典树:字典树是一种树形结构,是哈希树的变种。它特别适用于统计、排序和保存大量的字符串。字典树的基本性质包括:根节点不包含字符,除根节点外的每个子节点都包含一个字符;从根节点到某一节点的路径上经过的字符连接起来,就是该节点对应的字符串;每个节点的所有子节点包含的字符都不相同。这种结构利用字符串的公共前缀来减少查询时间,从而最大限度地减少无谓的字符串比较。
平衡二叉树:平衡二叉树(如AVL树)是一种特殊的二叉搜索树,它要求每个节点的左子树和右子树的高度之差的绝对值不超过1,以此确保树的平衡。这种平衡性使得在插入、删除和搜索操作时,树的深度保持在O(log n)级别,从而保证了操作的效率。

字典树:由于字典树能有效地处理具有公共前缀的字符串,因此它特别适合用于搜索引擎系统的文本词频统计、自动补全等场景。
平衡二叉树:平衡二叉树因其高效的插入、删除和搜索性能,常被用于数据库索引、文件系统、内存管理等需要频繁进行动态操作的场景。
总的来说,字典树和平衡二叉树在数据结构和性质上的差异导致了它们各自在不同应用场景中的优势。选择使用哪种数据结构,取决于具体的需求和数据特性。

应用场景:

字典树和平衡二叉树在实际应用场景中都有广泛的用途,它们各自在不同的领域和场景下发挥着重要的作用。

字典树(Trie树)的实际应用场景包括但不限于:

文本词频统计:在搜索引擎系统中,字典树被用于统计大量的字符串(但不仅限于字符串),以便快速定位包含特定字符串的文档。
自动完成功能:无论是在搜索框、表单还是其他文本输入场景中,字典树都能通过快速匹配前缀来提供用户可能感兴趣的搜索建议或自动补全功能。
前缀搜索:在电子邮件应用或文件系统中,用户可以通过输入部分名称或地址,利用字典树快速找到以指定前缀开头的项目。
维护关键字:在敏感信息检测系统中,字典树可以用来记录常见的敏感单词或短语,以便在系统扫描文档时快速检查是否包含任何敏感信息。
平衡二叉树的实际应用场景则包括:

数据库索引:平衡二叉树如AVL树和红黑树等,常被用于实现数据库中的索引结构,以加速数据的检索速度。
高效排序算法:通过利用平衡二叉树的性质,可以实现高效的排序算法,如二叉排序树和红黑树,从而提高排序算法的效率。
缓存淘汰算法:平衡二叉树也被用于实现高效的缓存淘汰算法,如LRU(Least Recently Used)算法,通过快速选择要淘汰的数据来提高缓存效率。
路由算法:在计算机网络中,平衡二叉树可用于实现高效的路由查找和转发算法。
综上所述,字典树和平衡二叉树各自在文本处理、数据库、排序、缓存管理和网络路由等领域都有着重要的实际应用场景。选择使用哪种数据结构取决于具体的需求和数据特性。

三、数据库索引

1、树在数据库索引中的作用

二叉搜索树(Binary Search Tree,简称 BST)是一种非常有用的数据结构,特别适用于数据索引和快速查找操作。在二叉搜索树中,每个节点包含一个值以及两个子节点(左子节点和右子节点)。左子节点的值小于其父节点的值,而右子节点的值大于其父节点的值。这种性质使得二叉搜索树在查找、插入和删除操作中都具有很高的效率。

在数据索引中,二叉搜索树的应用主要体现在以下几个方面:

快速查找:二叉搜索树的特性使得查找操作非常高效。给定一个目标值,可以从根节点开始,根据目标值与节点值的比较结果,选择向左子树或右子树递归查找。由于每个节点的子节点值都是有序的,因此可以快速地定位到目标值所在的位置。这种查找方式的时间复杂度通常为 O(log n),其中 n 是树中节点的数量。
范围查询:除了查找特定值外,二叉搜索树还可以方便地执行范围查询。例如,查找所有在某个范围内的值。通过遍历树中满足条件的节点,可以快速获取范围内的所有值。
动态数据维护:二叉搜索树能够高效地处理数据的插入和删除操作。当插入一个新值时,可以将其添加到合适的位置,以保持树的搜索属性。同样地,当删除一个值时,需要调整树的结构以确保剩余节点仍然满足搜索属性。这些操作的时间复杂度通常也是 O(log n)。
优化存储和访问:二叉搜索树可以通过平衡操作(如 AVL 树、红黑树等)来优化树的形状,以减少树的高度并进一步提高查找、插入和删除操作的效率。此外,通过适当的内存管理策略,可以有效地利用存储空间并减少访问延迟。
总之,二叉搜索树在数据索引中发挥着重要作用,它提供了一种高效的数据结构来支持快速查找、范围查询以及动态数据的维护。然而,需要注意的是,在实际应用中,还需要考虑数据的分布特性、内存限制以及并发访问等因素,以选择最合适的二叉搜索树变种或优化策略。

2、Oracle、Mysql 、Postgresql 索引所运用的树原理

Oracle数据库、MySQL和PostgreSQL是三种常用的关系型数据库,它们在索引的实现上都运用了树原理和技术,以提高数据的查询效率。以下是对这三种数据库中索引所运用的树原理和技术的详细总结:

Oracle数据库

Oracle数据库主要使用B-Tree索引和Bitmap索引。

B-Tree索引:B-Tree索引是一种平衡的树形结构,它以键值为关键字建立多叉搜索树,每个节点存储一个索引键值与对应记录指针。B-Tree索引的查找速度是与节点高度有关,节点高度越低,查询速度越快。Oracle数据库通过将索引分为多个块进行存储,每个块包含若干字节的数据和指向下一个块的指针,形成链式结构,以便快速定位到目标数据。
Bitmap索引:Bitmap索引是一种特殊的索引技术,在Bitmap索引中,每个索引键值对应一个位图,位图中每一位表示某一行是否存在该索引键值,1表示存在,0表示不存在。Bitmap索引通过逻辑位操作查找数据,因此其查找速度通常比B-Tree索引更快。
MySQL

MySQL的索引结构则更加多样化,包括哈希索引、B-Tree索引等。其中,InnoDB和MyISAM存储引擎主要使用B+树作为其索引结构。

B+树索引:B+树是B-树的扩展,其非叶子节点不保存关键字记录的指针,这样使得B+树更加矮胖,查询效率更加稳定。同时,B+树的叶子节点保存了关键字记录的指针,并且所有叶子节点中包含了全部关键字的信息以及指向含这些关键字记录的指针,且叶子节点本身依关键字的大小自小而大顺序链接。此外,B+树还有一个特点是有一个根节点,根节点只有子节点。所有关键字都出现在叶子节点的链表中(稠密索引),且链表中的节点依关键字大小有序。
哈希索引:MySQL中的MEMORY存储引擎支持哈希索引。哈希索引基于哈希表实现,它仅支持等值比较查询,如“=”、“IN()”和“<=>”,不支持范围查询。由于哈希索引中存储的是通过哈希算法计算得到的哈希值,因此其查询速度非常快。但是,哈希索引并不适用于所有场景,特别是在数据量较大或需要频繁进行范围查询的情况下,其性能可能会下降。
PostgreSQL

PostgreSQL主要使用B-Tree作为其索引结构。

B-Tree索引:在PostgreSQL中,B-Tree索引也是一棵自平衡的多叉树,它允许key+value存储于内部节点,且有序。这种结构使得对节点数据的增删改查的时间复杂度降低到O(logn),其中n是B-Tree节点的个数。B-Tree索引在PostgreSQL中得到了广泛的应用,因为它能够高效地支持各种查询操作,包括精确匹配和范围查询。
总结来说,Oracle数据库、MySQL和PostgreSQL都运用了树原理和技术来构建索引,以提高数据的查询效率。不同的数据库和存储引擎可能选择不同的索引结构以适应不同的应用场景和查询需求。在选择和使用索引时,需要根据实际的数据分布、查询模式和性能要求来做出决策。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/579311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络攻击日益猖獗,安全防护刻不容缓

“正在排队登录”、“账号登录异常”、“断线重连”......伴随着社交软件用户的一声声抱怨&#xff0c;某知名社交软件的服务器在更新上线2小时后&#xff0c;遭遇DDoS攻击&#xff0c;导致用户无法正常登录。在紧急维护几小时后&#xff0c;这款软件才恢复正常登录的情况。 这…

视频通话实时换脸:支持训练面部模型 | 开源日报 No.235

iperov/DeepFaceLive Stars: 19.7k License: GPL-3.0 DeepFaceLive 是一个用于 PC 实时流媒体或视频通话的人脸换装工具。 可以使用训练好的人脸模型从网络摄像头或视频中交换面部。提供多个公共面部模型&#xff0c;包括 Keanu Reeves、Mr. Bean 等。支持自己训练面部模型以…

基于数据挖掘的斗鱼直播数据可视化分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 随着网络直播平台的兴起&#xff0c;斗鱼直播作为其中的佼佼者&#xff0c;吸引了大量用户和观众。为了更好地理解和分析斗鱼直播中的数据&#xff0c;本项目介绍了一个基于数据挖掘的斗鱼直播数据…

【图解计算机网络】简单易懂的https原理解析

简单易懂的https原理解析 https与http的区别混合加密对称加密非对称加密混合加密解析混合加密问题 摘要算法数字证书数字证书原理为什么通过CA证书可以解决中间人攻击的问题呢&#xff1f; https握手流程 https与http的区别 http是明文传输的&#xff0c;非常不安全&#xff0…

呆马科技——智慧应急执法监管平台

在当今社会&#xff0c;安全生产的重要性日益凸显。对于各级政府和企事业单位&#xff0c;当务之急是如何高效地对突发事件进行执法管理。平台应运而生&#xff0c;旨在通过信息化、智能化技术&#xff0c;提升安全管理的效率与准确性。 一、平台特点 整合各类平台的信息资源&…

添加github SSH Key

添加github SSH Key 使用 SSH 协议&#xff0c;您可以连接远程服务器和服务并对其进行身份验证。使用 SSH 密钥&#xff0c;您可以连接到 GitHub&#xff0c;而无需在每次访问时提供您的用户名和个人访问令牌。您还可以使用 SSH 密钥来签署提交。 #3224333333qq.com替换为你自己…

6.NVIC中断配置(ST的精简ARM中断体系)

void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)//设置优先级分组&#xff0c;整个项目共用一个分组 uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) //计算优先级编码值&#xff0c;&#xff08;组号&…

Python爬虫--Ajax异步抓取腾讯视频评论

在某些网站 &#xff0c;当我们滑下去的时候才会显示出后面的内容 就像淘宝一样&#xff0c;滑下去才逐渐显示其他商品 这个就是采用 Ajax 做的 然后我们现在就是要编写这样的爬虫。 规律分析&#xff1a; 这个时候就要用到我们的 Fiddler 了 我们需要分析加载评论的规律 …

GateWay具体的使用之局部过滤器接口耗时

1.找规律 局部过滤器命名规则 XXXGatewayFilterFactory&#xff0c; 必须以GatewayFilterFactory结尾。 /* 注意名称约定 * AddRequestHeaderGatewayFilterFactory 配置的时候写的是 AddRequestHeader * AddRequestParameterGatewayFilterFactory 配置的时候写的是 A…

【语音识别】搭建本地的语音转文字系统:FunASR(离线不联网即可使用)

参考自&#xff1a; 参考配置&#xff1a;FunASR/runtime/docs/SDK_advanced_guide_offline_zh.md at main alibaba-damo-academy/FunASR (github.com)参考配置&#xff1a;FunASR/runtime/quick_start_zh.md at 861147c7308b91068ffa02724fdf74ee623a909e alibaba-damo-aca…

上位机图像处理和嵌入式模块部署(树莓派4b下使用sqlite3)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 嵌入式设备下面&#xff0c;有的时候也要对数据进行处理和保存。如果处理的数据不是很多&#xff0c;一般用json就可以。但是数据如果量比较大&…

CISSP通关学习笔记:共计 9 个章节(已完结)

1. 笔记说明 第 0 章节为开篇介绍&#xff0c;不包括知识点。第 1 - 8 章节为知识点梳理汇总&#xff0c;8 个章节的知识框架关系如下图所示&#xff1a; 2. 笔记目录 「 CISSP学习笔记 」0.开篇「 CISSP学习笔记 」1.安全与风险管理「 CISSP学习笔记 」2.资产安全「 CISSP…

Ps 滤镜:置换(工作原理篇)

执行“置换”滤镜时&#xff0c;目标图像会发生位移变形&#xff0c;而变形的程度及方向与一个称为“置换图”的 PSD 文件有密切关系。 总体而言&#xff0c;置换所产生的位移变形是基于置换图的通道中的灰度信息进行的。 一、当置换图是灰度模式文件时 在灰度模式下&#xff0…

[leetcode] B树是不是A树的子结构

给定两棵二叉树 tree1 和 tree2&#xff0c;判断 tree2 是否以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 注意&#xff0c;空树 不会是以 tree1 的某个节点为根的子树具有 相同的结构和节点值 。 示例 1&#xff1a; 输入&#xff1a;tree1 [1,7,5], tree2 [6,…

《QT实用小工具·四十四》支持图片和动图的文本编辑器

1、概述 源码放在文章末尾 该项目实现了一个功能丰富的文本编辑器&#xff0c;除了包含文本常规的编辑功能&#xff0c;还包括图片的插入功能和动图的插入功能&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "imagehelper.…

基于深度学习神经网络的AI图片上色DDcolor系统源码

第一步&#xff1a;DDcolor介绍 DDColor 是最新的 SOTA 图像上色算法&#xff0c;能够对输入的黑白图像生成自然生动的彩色结果&#xff0c;使用 UNet 结构的骨干网络和图像解码器分别实现图像特征提取和特征图上采样&#xff0c;并利用 Transformer 结构的颜色解码器完成基于视…

循环单链表的介绍与操作

定义 区别 链表合并 整合代码 typedef struct node{int data;node* next;; }lnode,*linklist; lnode* n; linklist l;//定义 void init(linklist &l){lnode lnew lnode;l->nextl;lnode *rl; } //单循环链表的合并 linklist merge(linklist &a,linklist b){//存头结…

注意力机制:SENet详解

SENet&#xff08;Squeeze-and-Excitation Networks&#xff09;是2017年提出的一种经典的通道注意力机制&#xff0c;这种注意力可以让网络更加专注于一些重要的featuremap&#xff0c;它通过对特征通道间的相关性进行建模&#xff0c;把重要的特征图进行强化来提升模型的性能…

ZISUOJ 高级语言程序设计实训-基础C(部分题)

说明&#xff1a; 有几个题是不会讲的&#xff0c;我只能保证大家拿保底分。 题目列表&#xff1a; 问题 A: 求平均数1 思路&#xff1a; 送分题…… 参考题解&#xff1a; #include <iostream> #include <iomanip> using std::cin; using std::cout;int main(…
最新文章