二叉查找树和B树

二叉查找树(Binary Search Tree, BST)和 B 树(B-tree)都是用于组织和管理数据的数据结构,但它们在结构、应用场景和性能方面有显著区别。

二叉查找树(Binary Search Tree, BST)
特点:

每个节点最多有两个子节点:左子节点和右子节点。
左子节点的值小于其父节点的值,右子节点的值大于其父节点的值。
各子树也分别是二叉查找树(递归性质)。
应用:

常用于内存中的搜索操作。
提供快速的查找、插入和删除操作(平均 O(log n) 时间复杂度,但最坏情况 O(n))。
示例:
创建一个简单的二叉查找树:

5

/
3 7
/ \ /
2 4 6 8
在这个 BST 中:

根节点是 5。
3 是左子节点,7 是右子节点。
左子树的值都小于 5,右子树的值都大于 5。
B 树(B-tree)
特点:

B 树是一个平衡多路搜索树,能够有多个子节点(不仅仅是二叉树中的两个)。
B 树的多个子节点由 m 阶表示,其中每个节点最多有 m 个子节点,最少有 ⌈m/2⌉ 个子节点(除根节点)。
所有叶子节点位于同一层。
内部节点包含一个有序数据数组,并提供了对数据的快速访问(平衡树性质)。
应用:

常用于存储大规模数据的数据库和文件系统中。
提供高效的磁盘块存取(优化磁盘读写操作)。
示例:
创建一个 B 树(假设 m=4 阶,表示每个节点最多4个子节点和3个值):

   [10 | 20]/    |    \

[5 | 7] [15] [25 | 30]
在这个 B 树中:

根节点有两个值(10 和 20)。
第一个子节点包含 5 和 7,第二个子节点是 15,第三个子节点有 25 和 30。
树结构图比较
二叉查找树:

5

/
3 7
/ \ /
2 4 6 8
B 树:

   [10 | 20]/    |    \

[5 | 7] [15] [25 | 30]
总结主要区别
子节点数量

BST:每个节点最多有两个子节点。
B树:每个节点可以有多个子节点(由阶 m 决定)。
平衡性

BST:插入和删除操作可能导致不平衡(特别是随机或顺序插入),需要额外操作(如 AVL 树或红黑树)来维护平衡性。
B树:天然平衡,所有叶子节点位于同一层。
应用场景

BST:适合在内存中操作,存取速度快(小数据集)。
B树:适合在磁盘上存储大规模数据,访问效率高(大数据集)。
时间复杂度

BST:查找、插入和删除的平均时间复杂度为 O(log n),最坏情况 O(n)。
B树:查找、插入和删除的平均和最坏时间复杂度都为 O(log n)。
通过以上比较,可以看出 BST 和 B 树在各自的应用场景中发挥不同的优势。BST 简单、直观,适合内存操作;B 树复杂、优化磁盘访问,适合大规模数据存储。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一段式端到端自动驾驶:VAD:Vectorized Scene Representation for Efficient Autonomous Driving

论文地址:https://github.com/hustvl/VAD 代码地址:https://arxiv.org/pdf/2303.12077 1. 摘要 自动驾驶需要对周围环境进行全面理解,以实现可靠的轨迹规划。以往的方法依赖于密集的栅格化场景表示(如:占据图、语义…

OpenCV训练题

一、创建一个 PyQt 应用程序,该应用程序能够: 使用 OpenCV 加载一张图像。在 PyQt 的窗口中显示这张图像。提供四个按钮(QPushButton): 一个用于将图像转换为灰度图一个用于将图像恢复为原始彩色图一个用于将图像进行…

opencv函数展示4

一、形态学操作函数 1.基本形态学操作 (1)cv2.getStructuringElement() (2)cv2.erode() (3)cv2.dilate() 2.高级形态学操作 (1)cv2.morphologyEx() 二、直方图处理函数 1.直方图…

iPhone 13P 换超容电池,一年实记的“电池循环次数-容量“柱状图

继上一篇 iPhone 13P 更换"移植电芯"和"超容电池"🔋体验,详细记录了如何更换这两种电池,以及各自的优略势对比。 一晃一年过去,时间真快,这次分享下记录了使用超容电池的 “循环次数 - 容量(mAh)…

基于 pnpm + Monorepo + Turbo + 无界微前端 + Vite 的企业级前端工程实践

基于 pnpm Monorepo Turbo 无界微前端 Vite 的企业级前端工程实践 一、技术演进:为什么引入 Vite? 在微前端与 Monorepo 架构落地后,构建性能成为新的优化重点: Webpack 构建瓶颈:复杂配置导致开发启动慢&#…

(五)机器学习---决策树和随机森林

在分类问题中还有一个常用算法:就是决策树。本文将会对决策树和随机森林进行介绍。 目录 一.决策树的基本原理 (1)决策树 (2)决策树的构建过程 (3)决策树特征选择 (4&#xff0…

Vue3使用AntvG6写拓扑图,可添加修改删除节点和边

npm安装antv/g6 npm install antv/g6 --save 上代码 <template><div id"tpt1" ref"container" style"width: 100%;height: 100%;"></div> </template><script setup>import { Renderer as SVGRenderer } from …

Arduino编译和烧录STM32——基于J-link SWD模式

一、安装Stm32 Arduino支持 在arduino中添加stm32的开发板地址&#xff1a;https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json 安装stm32开发板支持 二、安装STM32CubeProgrammer 从stm32网站中安装&#xff1a;https://ww…

智慧城市气象中台架构:多源天气API网关聚合方案

在开发与天气相关的应用时&#xff0c;获取准确的天气信息是一个关键需求。万维易源提供的“天气预报查询”API为开发者提供了一个高效、便捷的工具&#xff0c;可以通过简单的接口调用查询全国范围内的天气信息。本文将详细介绍如何使用该API&#xff0c;以及其核心功能和调用…

Vue 组件化开发

引言 在当今的 Web 开发领域&#xff0c;构建一个功能丰富且用户体验良好的博客是许多开发者的目标。Vue.js 作为一款轻量级且高效的 JavaScript 框架&#xff0c;其组件化开发的特性为我们提供了一种优雅的解决方案。通过将博客拆分成多个独立的组件&#xff0c;我们可以提高代…

Deno 统一 Node 和 npm,既是 JS 运行时,又是包管理器

Deno 是一个现代的、一体化的、零配置的 JavaScript 运行时、工具链&#xff0c;专为 JavaScript 和 TypeScript 开发设计。目前已有数十万开发者在使用 Deno&#xff0c;其代码仓库是 GitHub 上 star 数第二高的 Rust 项目。 Stars 数102620Forks 数5553 主要特点 内置安全性…

应用篇02-镜头标定(上)

本节主要介绍相机的标定方法&#xff0c;包括其内、外参数的求解&#xff0c;以及如何使用HALCON标定助手实现标定。 计算机视觉——相机标定(Camera Calibration)_摄像机标定-CSDN博客 1. 原理 本节介绍与相机标定相关的理论知识&#xff0c;不一定全&#xff0c;可以参考相…

PG CTE 递归 SQL 翻译为 达梦版本

文章目录 PG SQLDM SQL总结 PG SQL with recursive result as (select res_id,phy_res_code,res_name from tbl_res where parent_res_id (select res_id from tbl_res where phy_res_code org96000#20211203155858) and res_type_id 1 union all select t1.res_id, t1.p…

C# Where 泛型约束

在C#中&#xff0c;Where关键字主要有两种用途 1、在泛型约束中限制类型参数 2、在LINQ查询中筛选数据 本文主要介绍where关键字在在泛型约束中的使用 泛型定义中的 where 子句指定对用作泛型类型、方法、委托或本地函数中类型参数的参数类型的约束。通过使用 where 关键字和…

《MySQL:MySQL表的约束-主键/复合主键/唯一键/外键》

表的约束&#xff1a;表中一定要有各种约束&#xff0c;通过约束&#xff0c;让未来插入数据库表中的数据是符合预期的。约束本质是通过技术手段&#xff0c;倒逼程序员插入正确的数据。即&#xff0c;站在mysql的视角&#xff0c;凡是插入进来的数据&#xff0c;都是符合数据约…

Qt 创建QWidget的界面库(DLL)

【1】新建一个qt库项目 【2】在项目目录图标上右击&#xff0c;选择Add New... 【3】选择模版&#xff1a;Qt->Qt设计师界面类&#xff0c;选择Widget&#xff0c;填写界面类的名称、.h .cpp .ui名称 【4】创建C调用接口&#xff08;默认是创建C调用接口&#xff09; #ifnd…

汽车免拆诊断案例 | 2011款雪铁龙世嘉车刮水器偶尔自动工作

故障现象 一辆2011款雪铁龙世嘉车&#xff0c;搭载1.6 L 发动机&#xff0c;累计行驶里程约为19.8万km。车主反映&#xff0c;该车刮水器偶尔会自动工作&#xff0c;且前照灯偶尔会自动点亮。 故障诊断 接车后试车发现&#xff0c;除了上述故障现象以外&#xff0c;当用遥控器…

【Linux】NAT、代理服务、内网穿透

NAT、代理服务、内网穿透 一. NAT1. NAT 技术2. NAT IP 转换过程3. NAPT 技术4. NAT 技术的缺陷 二. 代理服务器1. 正向代理2. 反向代理3. NAT 和代理服务器 内网穿透内网打洞 一. NAT NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;技术&a…

MobaXterm连接Ubuntu(SSH)

1.查看Ubuntu ip 打开终端,使用指令 ifconfig 由图可知ip地址 2.MobaXterm进行SSH连接 点击session,然后点击ssh,最后输入ubuntu IP地址以及用户名

Spring Boot系列之使用Arthas Tunnel Server 进行远程调试实践

Spring Boot系列之使用Arthas Tunnel Server 进行远程调试实践 前言 在开发和运维 Java 应用的过程中&#xff0c;远程诊断和调试是一个不可或缺的需求。尤其是当生产环境出现问题时&#xff0c;能够快速定位并解决这些问题至关重要。Arthas 是阿里巴巴开源的一款强大的 Java…