数据结构之查找算法:B树
查找算法:B树
- 思维导图:
- B树的定义:
- 例:
- n个关键字,阶数为m,高度为h的B树的高度计算
- 基本操作:
- 查找:
- 插入:
- 删除:
- 对终端节点的删除:
- 对非终端节点的删除:
思维导图:
B树的定义:
n:关键字的个数,由B树定义可知,m/2-1取上界 <= n <= m-1
p:指向子树的指针
k:关键字
例:
ps: 这是一颗三阶的树,所以每个节点最多只能有3颗子树
ps: 本质上是绝对平衡,即左右子树高度差为0
ps: 3/2取上界为2,即每个非叶节点至少有2颗子树
ps:
节点的关键字必须按从小到大的顺序排序
每个节点左子树的关键字小于该节点关键字,右子树大于该节点关键字
n个关键字,阶数为m,高度为h的B树的高度计算
最小高度:
ps:
h最小的时候就是每层节点数都取最大的时候,就是满二叉树的时候
所以总的节点个数为后面括号所示
又每个节点的关健字最大为m-1个
所以乘起来即为最大的关键字数
最大高度:
ps:
h最小的时候就是每层节点数都取最小的时候
第一层的关键字个数最小为1,则第二层的子树为2,即第二层有俩个节点
每个节点的最小关键字为m/2取下界个,所以第二层总关键字数为2倍的m/2取下界个
以此类推,第h层总关键字数为2倍的(m/2取下界)的h-1次幂
又一个节点对应一个关键字(最小)且第h层为查找失败节点个数 = 查找成功节点个数 + 1 = n+1
基本操作:
查找:
ps: 查找32
因为18<32<33,所以查找关键字18右边、33左边的子树,即23、30这个节点的子树
又30<32,所以查找关键字30右边的子树,即3、32这个节点的子树
查找成功,找到32
插入:
例:
初始:
插入:
分裂:(这是一颗三阶数,所以每个节点的关键字最大为2,19、20、21不满足,所以分裂)
在分裂:
在分裂:
删除:
对终端节点的删除:
例1: (兄弟够借的情况)
初始:
从左兄弟借:
或者从右兄弟借:(原理相同)
例2:(兄弟不够借的情况)
初始:
合并:
对非终端节点的删除:
例1:
初始:
删除:(用左子树最右侧的关键字替换,然后删除被替换的节点)
例2:
初始:
删除:(用右子树最左侧的关键字替换,然后删除被替换的节点)
例3:
初始:
删除:
数据结构之查找算法:B树相关推荐
- 数据结构之查找算法:B+树
查找算法:B+树 B+树的定义:(数据库中应用) B树与B+树的区别: B+树的定义:(数据库中应用) 例: ps:这是一颗四阶树,所以每个节点最多可以有4颗子树 ps:每个节点的关键字都不能小于2 ...
- 经典查找算法 --- B+树
B+树 B+树是应文件系统所需而产生的一种B-树的 变形树 .一棵m 阶的B+树和m 阶的B- 树的差异在于: ⑴有n 棵子树的结点中含有n 个关键码: ⑵所有的叶子结点中包含了全部关键码的信息,及指 ...
- 【数据结构】查找算法
文章目录 查找算法 顺序查找算法 折半查找 分块查找 二叉排序树 平衡二叉树(AVL树) 散列表 哈希函数的构造 处理冲突的方法 哈希查找算法及其实现 查找算法 查找:在数据集合中寻找满足某种条件的数 ...
- 数据结构之查找算法:折半查找
查找算法:折半查找 思维导图: 算法思想: 代码实现: 判定树: 折半查找判定树的构造: 顺序查找与折半查找对比: 思维导图: 算法思想: 代码实现: typedef struct {int *ele ...
- 数据结构之查找算法:顺序查找
查找算法:顺序查找 思维导图: 顺序查找的定义: 顺序查找的代码实现: 顺序查找的性能: 思维导图: 顺序查找的定义: 顺序查找的代码实现: typedef struct { //查找表数据结构int ...
- 数据结构——四大查找算法(工作必备)
在java中,常用的查找有四种 顺序(线性)查找 二分查找折半查找 插值查找 斐波那契查找 目录 1. 线性查找 2. 二分查找 3. 插值查找 4. 斐波那契查找 1. 线性查找 线性查找是逐一比对 ...
- 数据结构: 插值查找算法
import java.util.Arrays;// 插值查找算法,也要求数组是有序的 public class InsertValueSearch {public static void main( ...
- 数据结构之查找算法:基本概念
查找算法:基本概念 思维导图: 查找的基本概念及基本操作: 思维导图: 查找的基本概念及基本操作: ps: Pi表示元素出现的概率,一般情况下,默认各个元素出现的概率相同 Ci表示元素出现的次数
- 数据结构之查找算法:散列查找
查找算法:散列查找 思维导图: 散列函数和散列表: 构造散列函数的要求: 构造散列函数的方法: 直接定址法: 除留取余法: 数字分析法: 平方取中法: 折叠法: 解决冲突的方法: 开放定址法: 线性探 ...
最新文章
- 为什么说特斯拉在自动驾驶上比Waymo更占优势
- 引号快捷键_就业有“位”来 能让你早下班的常用快捷键
- Android秒级编译方案-FreeLine
- 数据结构排序法之希尔排序法(Shell Sort)
- 二级c语言上机程序填空,浙江省计算机二级c语言上机考试真题(二)程序填空
- JDK8新特性之Lambda表达式和四大函数接口
- 使用JAVASCRIPT进行全屏显示页面,就像触摸屏显示效果
- jboss eap6.1(4)(部署应用)
- 利用wcf传递字节的简单例子
- 下标超出数量 oracle,超出最大会话数和Ora-00020超出最大进程数错误的解决方法...
- 一级计算机excel打不开,Excel打不开,教您怎么解决Excel打不开
- AntV G6 自定义节点图形
- 乐视2 usb计算机连接,乐视 LetvX620 开启USB调试模式
- 解决嵌入百度导航4.1.x遇到的坑
- 戴尔 DELL 游戏笔记本电脑 - Windows 10 关闭或开启功能键 (Fn key)
- 2021-11-10----韩顺平Java入门第七天
- Java之 public class 和 class 的区别
- SMETA认证辅导,SMATA验厂审核现场会查验哪些文件
- 统计1~N之间所有立方数的个数并输出这个数目(Java编写)
- 大学计算机云计算ppt,云计算技术在大学计算机应用大赛中的应用分析
热门文章
- 揭秘!月薪30K的大牛到底看了哪些视频?【共2000G】
- html 表单命名规范,最佳实践:按HTML ID或名称属性访问表单元素?
- xiao77论坛php,论坛
- mysql异常关闭7034,SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
- 强烈推荐:给去美国的新生说几句(转载),超实用
- 酱油和gbt酱油哪个好_酱油不是越贵越好,聪明人才知道的两个选酱油小技巧
- 可持久化数据结构、可并堆
- Linux编译安装nginx1.4.7版本
- win7卸载python2.7_win7重装系统后设置Python2.7环境
- win7怎么进入安全模式_windows 10如何进入安全模式