查找算法: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树相关推荐

  1. 数据结构之查找算法:B+树

    查找算法:B+树 B+树的定义:(数据库中应用) B树与B+树的区别: B+树的定义:(数据库中应用) 例: ps:这是一颗四阶树,所以每个节点最多可以有4颗子树 ps:每个节点的关键字都不能小于2 ...

  2. 经典查找算法 --- B+树

    B+树 B+树是应文件系统所需而产生的一种B-树的 变形树 .一棵m 阶的B+树和m 阶的B- 树的差异在于: ⑴有n 棵子树的结点中含有n 个关键码: ⑵所有的叶子结点中包含了全部关键码的信息,及指 ...

  3. 【数据结构】查找算法

    文章目录 查找算法 顺序查找算法 折半查找 分块查找 二叉排序树 平衡二叉树(AVL树) 散列表 哈希函数的构造 处理冲突的方法 哈希查找算法及其实现 查找算法 查找:在数据集合中寻找满足某种条件的数 ...

  4. 数据结构之查找算法:折半查找

    查找算法:折半查找 思维导图: 算法思想: 代码实现: 判定树: 折半查找判定树的构造: 顺序查找与折半查找对比: 思维导图: 算法思想: 代码实现: typedef struct {int *ele ...

  5. 数据结构之查找算法:顺序查找

    查找算法:顺序查找 思维导图: 顺序查找的定义: 顺序查找的代码实现: 顺序查找的性能: 思维导图: 顺序查找的定义: 顺序查找的代码实现: typedef struct { //查找表数据结构int ...

  6. 数据结构——四大查找算法(工作必备)

    在java中,常用的查找有四种 顺序(线性)查找 二分查找折半查找 插值查找 斐波那契查找 目录 1. 线性查找 2. 二分查找 3. 插值查找 4. 斐波那契查找 1. 线性查找 线性查找是逐一比对 ...

  7. 数据结构: 插值查找算法

    import java.util.Arrays;// 插值查找算法,也要求数组是有序的 public class InsertValueSearch {public static void main( ...

  8. 数据结构之查找算法:基本概念

    查找算法:基本概念 思维导图: 查找的基本概念及基本操作: 思维导图: 查找的基本概念及基本操作: ps: Pi表示元素出现的概率,一般情况下,默认各个元素出现的概率相同 Ci表示元素出现的次数

  9. 数据结构之查找算法:散列查找

    查找算法:散列查找 思维导图: 散列函数和散列表: 构造散列函数的要求: 构造散列函数的方法: 直接定址法: 除留取余法: 数字分析法: 平方取中法: 折叠法: 解决冲突的方法: 开放定址法: 线性探 ...

最新文章

  1. 为什么说特斯拉在自动驾驶上比Waymo更占优势
  2. 引号快捷键_就业有“位”来 能让你早下班的常用快捷键
  3. Android秒级编译方案-FreeLine
  4. 数据结构排序法之希尔排序法(Shell Sort)
  5. 二级c语言上机程序填空,浙江省计算机二级c语言上机考试真题(二)程序填空
  6. JDK8新特性之Lambda表达式和四大函数接口
  7. 使用JAVASCRIPT进行全屏显示页面,就像触摸屏显示效果
  8. jboss eap6.1(4)(部署应用)
  9. 利用wcf传递字节的简单例子
  10. 下标超出数量 oracle,超出最大会话数和Ora-00020超出最大进程数错误的解决方法...
  11. 一级计算机excel打不开,Excel打不开,教您怎么解决Excel打不开
  12. AntV G6 自定义节点图形
  13. 乐视2 usb计算机连接,乐视 LetvX620 开启USB调试模式
  14. 解决嵌入百度导航4.1.x遇到的坑
  15. 戴尔 DELL 游戏笔记本电脑 - Windows 10 关闭或开启功能键 (Fn key)
  16. 2021-11-10----韩顺平Java入门第七天
  17. Java之 public class 和 class 的区别
  18. SMETA认证辅导,SMATA验厂审核现场会查验哪些文件
  19. 统计1~N之间所有立方数的个数并输出这个数目(Java编写)
  20. 大学计算机云计算ppt,云计算技术在大学计算机应用大赛中的应用分析

热门文章

  1. 揭秘!月薪30K的大牛到底看了哪些视频?【共2000G】
  2. html 表单命名规范,最佳实践:按HTML ID或名称属性访问表单元素?
  3. xiao77论坛php,论坛
  4. mysql异常关闭7034,SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
  5. 强烈推荐:给去美国的新生说几句(转载),超实用
  6. 酱油和gbt酱油哪个好_酱油不是越贵越好,聪明人才知道的两个选酱油小技巧
  7. 可持久化数据结构、可并堆
  8. Linux编译安装nginx1.4.7版本
  9. win7卸载python2.7_win7重装系统后设置Python2.7环境
  10. win7怎么进入安全模式_windows 10如何进入安全模式