2_3查找树

算法之2-3查找树:平衡数据结构的奥秘与实践 在编程学习的漫漫长路上,算法就像一座难以攀登却又充满宝藏的山峰。我在探索算法的过程中,经历了无数次的思考与尝试,也遇到了许多难题。深知独自面对这些挑战时的艰辛,所以希望通过这篇博客,能与大家一同深入学习算法知识,在交流和分享中共同进步,让更多人感受到算法的魅力,提升编程技能。 阅读详情

2_3查找树的定义

在一棵含有N个结点的二叉查找树中,我们希望树高为lgN,这样就能保证所有查找都能在lgN次比较内结束,就和二分查找一样。

2_3查找树可以解决这样的问题:

定义:

一棵2-3查找树或为一棵空树,或由以下结点组成:
2-结点,含有一个键和两条链接,左链接指向的2-3树种的键都小于该结点,右链接指向的2-3树中的键都大于该结点。
3-结点,含有两个键和三条链接,左链接指向的2-3树种的键都小于该结点,中链接指向的2-3树种的键都位于该结点的两个键之间,右链接指向的2-3树中的键都大于该结点。
一棵完美平衡的2-3查找树中的所有空连接到根节点的距离都应该是相同的。

2-3查找树的重点是插入和删除过程中如何保持平衡,查找过程和普通二叉查找树无异。

2-3查找树的查找

这里写图片描述

2-3查找树的插入

2-3查找树的插入是一个复杂的过程,插入要保证在插入一个新元素之后查找树的平衡性不变。

为了更好地理解2-3查找树的插入,我们分成四种情况进行讨论:

(1).向2-结点中插入新键

要向2-3查找树插入一个新结点,我们需要将要插入结点在2-3查找树中进行一次未命中查找,如果未命中查找结束于一个2-结点,那么事情就好办了,我们只需要向这个2-结点中加入要插入键,将2-结点拓展为3-结点即可。

这里写图片描述

(2).向一棵只含有一个3-结点的树种插入新键

我们先假设需要向一棵只含有一个3-结点的树中插入一个新键,这个3-树就像这样
这里写图片描述
向这课树插入结点,我们只需要先拓展3-结点,使之成为4-结点,拓展之后的结果如下:
这里写图片描述
然后,将这个结点分裂,转换为一棵由3个2-结点组成的2-3树,其中一个结点(根)含有中键,一个结点含有3个键中最大者(和根结点的右链接相连),一个结点含有3个键中的最小者(和根结点的左链接相连)。转换完成之后这棵树就变成一棵含有3个结点的二叉查找树,同时也是一棵完美平衡的2-3树。
这里写图片描述

(3).向一个父结点为2-结点的3-结点中插入新键

假设我们未命中查找结束于一棵3-结点,并且这个3-结点的父结点为2-结点,这个时候我们可以先参照(2)中的将3-结点拓展为4-结点,然后再将其分裂,不过此时我们不会为中键创建一个新结点,而是将其移动至原来的父结点中,因为此时父结点为2-结点,将中键移入父结点中使父结点成为3-结点,就可以继续保持平衡。转换过程如图所示:

这里写图片描述

(4).向一个父结点为3-结点的3-结点中管插入新键

假设未命中查找结束于一个父结点为3-结点的3-结点。我们也是和(3)一样,构造一个4-结点并分解它,然后将中键插入到它的父结点中,但此时父结点也是一个3-结点,因此我们再次使用这个中键和父结点构造一个4-结点,分解4-结点然后将中键插入到更高层父结点中,若此时跟高层的父结点还是3-结点,我们就必须继续上溯重复执行这个过程直到遇到一个2-的结点并将它替换为一个不需要继续分解的3-结点。
还有一种情况就是我们在上溯的时候,直到上溯到根结点时还没有找到一个2-结点,即当我们上溯到根结点时,到达了3-结点的根,这个时候,我们就需要分解根结点了,如果从插入结点到根结点的路径上全都是3-结点,那我们的根结点最终会编程一个临时的4-结点。此时我们可以按照向一棵只有一个3-结点的书中插入新键的方法处理这个问题,我们将临时的结点分解称为3个2-结点,使得树高加1。这次最后的变换仍然保持了树的完美平衡性,因为它变换的是根结点。

这里写图片描述

值得注意的是,2-3查找树不管是局部变换还是全局变换都不会影响数的全局有序性和平衡性。
C#实战:5分钟搞定西门子S7-1200 PLC数据读写(S7netplus保姆级教程) 本文详细介绍了如何使用C#和S7netplus库快速实现与西门子S7-1200 PLC的数据读写。从环境准备、连接管理到数据读写高级技巧,提供了保姆级教程和实战方案,帮助开发者绕过常见陷阱,提升工业自动化项目的开发效率。 阅读详情

相关推荐

高通平台power_supply 框架下添加第三方充电IC的驱动方法

1.power_supply电源框架介绍: power supply framework在kernel/drivers/power/下。内核抽象出来power supply子系统为驱动提供了统一的框架。 功能包括: 1.抽象PSY设备的共性,向用户空间提供统一的API; 2.为底层PSY驱动的编写,提供简单、统一的方式,同时封装并实现公共逻辑。 power supply class位于d...

Change 1万+

2-3树插入、删除操作

一、定义2-3查找树的定义如下: 要么为空,要么: 对于2节点,该节点保存一个key及对应value,以及两个指向左右节点的节点,左节点也是一个2-3节点,所有的值都比key要小,右节点也是一个2-3节点,所有的值比key要大 对于3节点,该节点保存两个key及对应value,以及三个指向左中右的节点。左节点也是一个2-3节点,所有的值均比两个key中的最小的key还要小;中间节点也是一个2-3节点

Programming is an art form. 4841

Autoware.universe部署03:与Carla(二进制版)联调

本文介绍了 Autoware.universe 与 Carla 二进制版的联调过程。Autoware.universe 是一个开源的自动驾驶软件平台,而 Carla 则是一个用于自动驾驶仿真的开源工具。将这两者联调起来可以在仿真环境中测试和验证 Autoware.universe 的功能和性能,为自动驾驶系统的开发和测试提供有力支持。

zardforever123的博客 7370

2-3查找树

2-结点,含有一个键(及其对应的值)和两条链接,左链接指向的2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。 3-结点,含有两个键(及其对应的值)和三条链接,左链接指向的2-3树中的键都小于该结点,中链接指向的2-3树中的键都位于该结点的 两个键之间,右链接指向的2-3树中的键都大于该结点。...

数据工匠记 1381

WPT无线电能传输公式推导、编程计算、仿真验证全过程

主要分为5大模块,分别为无补偿,SS,SP,PP,PS,每个模块对应有公式推导,matlab编程计算相关参数以及将计算参数和仿真验证观察是否对应。采用matlab编程计算参数以及simulink仿真验证

zzhao2580的博客 7758

逐行逐句进一步了解SurroundOcc(一)

通过分析中的模型构建过程,理解了从配置文件到模型实例化的整个流程。构建过程的核心是通过build和等函数,逐步将配置文件解析并生成模型的各个模块对象,最终组合成一个完整的模型结构。这一过程涉及多个类和函数的调用,其中函数是生成对象的关键,它能够从配置字典中提取必要信息并生成对应的类实例。

lovely_yoshino的博客 8113

2-3查找树的实现(c++)

【代码】2-3查找树的实现(c++)

m0_60508734的博客 231

【Claude】Auto mode cannot determine the safety of an action 报错已解决

Claude Code Auto mode 安全分类器报错完整解析,涵盖 temporarily unavailable、could not evaluate、transcript exceeded 三种情况的根因与处理

博客 1万+

人工智能 ——与/或树的启发式搜索

希望树 希望树是指搜索过程中最有可能成为最优解树的那棵树。与/或树的启发式搜索过程就是不断地选择、修正希望树的过程,在该过程中,希望树是不断变化的。它需要符合以下三个条件: 初始结点S0在希望树T 如果n是具有子结点n1, n2, … , nk的或结点,则n的某个子结点ni在希望树T中的充分必要条件是 如果n是与结点,则n的全部子结点都在希望树T中。 启发式搜索过程 启发式搜索实例 ...

starter_____的博客 1万+

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频)

Win11极速安装Tensorflow-gpu+CUDA+cudnn(含视频链接)

weixin_46713695的博客 1万+

【系统架构设计师】预测试卷十:综合知识(75道选择题)

本文包含75道选择题,覆盖计算机系统、操作系统、网络、数据库、软件工程等核心知识域,其中系统架构设计与评估占比最高(19题)。题目难度稍高,注重灵活应用,题干全新且不与前8套重复。部分典型题目解析包括:计算机性能比较(CPU时间公式TLB/页表机制)、Cache写策略、流水线分支惩罚、管程条件变量、LRU近似算法、自旋锁适用场景、TCP字节流特性、Anycast应用、MVCC机制、分布式事务选型等。答案详解强调易错点,如性能比较需综合计算、TLB缺失不等于缺页、

数据知道的博客 478

人工智能课程必背知识点

人工智能课程复习

只须一笑不须愁X的博客 4777

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

2-3 查找树

[TOC] 在之前的二分搜索和二叉查找树中已经能够很好地解决查找的问题了,但是它们在最坏情况下的性能还是很糟糕 理想情况下我们希望能够保持二分查找树的平衡性。在一棵含有N个结点的树中,我们希望树高为 ~lgN,这样我们就能保证所有查找都能在 ~lgN 次比较内结束 一、定义 为了保证查找树的平衡性,我们需要一些灵活性,因此我们允许树中的一个结点保存多个键。 将一棵标准的二叉查找树中的结点...

能能 1066

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

2-3查找树和红黑二叉查找树

2-3查找树 定义:一颗2-3查找树或一颗空树,或由一下节点组成: 2-结点,含有一个键(及其对应的值)和两个链接,左链接指向的2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点 3-结点,含有两个键(及其对应的值)和三条链接,左链接指向的2-3树中的键都小于该结点,中链接指向的2-3树中的键都位于该结点的两个键之间,右链接指向2-3树中的键都大于该结点 红黑二叉查找树 定义:...

qq_40265485的博客 362

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

图解红黑树之2-3查找树

树结构树结构有下面的几个缺点 空间:占空间较多相对于线性结构 创建:构造起来比较麻烦 维护:对于平衡树,结构修改(增、删)后又需要平衡 那么,既然这样为什么还要用树结构呢。原因很简单,它的插入和删除操作所使用的时间非常短。红黑树可以在O(log n)的时间内做查找、插入和删除操作。2-3查找树直接接受“红黑树”还是有些难以下咽的,红黑树跟2-3查找树有着千丝万缕的联系,因此这里从简单轻松的2-3查找

TonyaBaSy 2701

2-3查找树(2-3 search trees)

前言 在学习了基本的二叉树之后,现在我们来看看另一种效率更高的树——平衡查找树,这种树有几种: AVL 2-3 Search Trees Red-black BSTs ——红黑二叉查找树 今天我们先从最简单的学习:2-3 查找树 2-3 查找树: 2-3查找树与二叉树有两个十分明显的区别: 1. 二叉树对父节点与子节点的关系没有严格的限制,而2-3 查找树中要求左子节点的值小于父节点...

qq_39747794的博客 1992

平衡树:2-3查找树

平衡树 查找树相较于链表数组来说,查找效率很高,我们知道影响查找树效率的最大因素就是查找树的深度,最坏的情况就是所有的结点都在根结点的一侧就像下面这种情况 平衡树思想就是为了优化树的查找,让根结点两侧结点数目“平衡”,来达到降低查找树高度的目的 2-3查找树 2-3查找树是一种平衡树的思想 我们将标准二叉查找树的结点称为2-结点(含有一个键和两条链),而现在我们引入3-结点,它含有两个键和三条链。每一条链就是一个分区 2-3查找树定义 一棵2-3查找树要么为空,要么满足满足下面两个要求: 2-结点: 含有一

mxy568767179的博客 376

数据结构和算法(八)--2-3查找树

含有一个键(及其对应的值)和两条链,左链接指向2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。含有两个键(及其对应的值)和三条链,左链接指向的2-3树中的键都小于该结点,中链接指向的2-3树中的键都位于该结点的两个键之间,右链接指向的2-3树中的键都大于该结点。

杀神lwz的博客 1105

二叉查找树的局限以及2-3查找树的简单介绍

在大部分情况下,二叉查找树的效率比链表查询效率要高得多,但在最坏的情况下,二叉查找树的性能也很糟糕。 如下图,依次往二叉查找树中插入9,8,7,6,5,4,3,2,1。如果要查找1,查找的效率依然很低,效率低的原因在于这个树并不平衡,全部向左边分支。 我们希望有一种方法,能够不受插入数据的影响,让生成的树都像完全二叉树那样,那么即使在最坏情况下,查找的效率依旧会很好。 这样便引入了2-3查找树。

sc179的博客 704

《黑马程序员》— 2-3查找树

2-3查找树定义 二叉查找树有可能出现如下的极端情形。 为了保证查找树的平衡性,=允许树中的一个结点保存多个键。确切的说,我们将一棵标准的二叉查找树中的结点称为2-结点(含有一个键和两条链),而现在我们引入3-结点,它含有两个键和 三条链。 2-3查找树的结点要么是2-结点,要么是3-结点。结点都是左小,右大。 2-结点: 含有一个键(及其对应的值)和两条链,左链接指向2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。 3-结点:含有两个键(及其对应的值)和三条.

Amigo_1997的博客 756

2-3 查找树及其Java实现

2-3 查找树 定义(来源:wiki) 查找 插入 2-3 查找树 定义(来源:wiki) 2–3树是一种树型数据结构,内部节点(存在子节点的节点)要么有2个孩子和1个数据元素,要么有3个孩子和2个数据元素,叶子节点没有孩子,并且有1个或2个数据元素。 2个结点 ...

weixin_30289831的博客 465

平衡查找树——2-3查找树——红黑树(1)

二叉查找树VS平衡查找树Binary Search Tree possibilitiesBalanced Search Trees如何学 平衡查找树为了保证之前学习的二分查找树BST的平衡性,解决在最坏情况时高度为N的情况,这里有几种平衡查找树: AVL 2-3 Search Trees Red-black BSTs ——红黑二叉查找树 直接关注最重要的一种搜索树——红黑树,在SGI STL中红黑树

这个世界,它还是它。 3539
上一篇: 数组中出现次数超过一半的数字
下一篇: 20170605_WPSC++实习_电话二面
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值