B树的定义和特点

news2024/11/27 6:39:35

1.多叉查找树的效率

  • 策略1:m叉查找树中,规定除了根节点外,任何结点至少有[m/2]个分叉
  • 即至少含有[m/2]-1个关键字。
  • 策略2:m叉查找树中,规定对于任何一个结点,其所有子树的高度都要相同

而满足以上两种策略的树被称为B树。

2.B树的定义

B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。

1.B树的特点

一棵m阶B树或为空树,或为满足如下特性的m叉树:

  1. 树中每个结点至多有m棵子树,即至多含有m-1个关键字。
  2. 若根结点不是终端结点,则至少有两棵子树。
  3. 除根结点外的所有非叶结点至少有「m/2]棵子树,即至少含有「m/2]-1个关键字
  4. 所有非叶结点的结构如下:
    在这里插入图片描述

其中,Ki (i = 1,2…, n)为结点的关键字,且满足K1<K2<…<Kn;
Pi (i= 0,1… n)为指向子树根结点的指针,且指针Pi-1所指子树中所有结点的关键字均小于Ki,
Pi所指子树中所有结点的关键字均大于Ki,n( [m/2]- 1≤n≤m -1)为结点中关键字的个数。

  1. 所有的叶结点都出现在同一层次上,并且不带信息(可以视为外部结点或类似于折半查找判定树的查找失败结点,实际上这些结点不存在,指向这些结点的指针为空)。

例如:
在这里插入图片描述

2.m阶B树的核心特性

  • 根节点的子树数∈[2, m],关键字数∈[1, m-1]。
  • 其他结点的子树数∈[[m/2], m];关键字数∈[[m/2]-1, m-1]
  • 对任一结点,其所有子树高度都相同
  • 关键字的值∶子树0<关键字1<子树1<关键字2<子树2<…(类比二叉查找树左<中<右)
    \

3.计算B树的高度

注:大部分学校算B树的高度不包括叶子结点(失败结点)

问题:含n个关键字的m阶B树,最小高度、最大高度是多少?

1.最小高度:

  • 让每个结点尽可能的满,有m-1个关键字,m个分叉,
  • 则有 n ≤ ( m − 1 ) ( 1 + m + m 2 + m 3 + . . . + m h − 1 − 1 ) = m h − 1 n≤(m - 1)(1+ m+m^2+m^3+ ...+ m^{h-1}-1)= m ^h-1 n(m1)(1+m+m2+m3+...+mh11)=mh1
  • 因此 h ≥ l o g m ( n + 1 ) h ≥ log_ m(n+1) hlogm(n+1)

2.最大高度:

  • 让各层的分叉尽可能的少,即根节点只有2个分叉,其他结点只有[m/2]个分叉,
  • 各层结点至少有:第一层1、第二层2、第三层2[m/2] …第h层 2 ( [ m / 2 ] ) h − 2 2([m/2])^{h-2} 2([m/2])h2,
  • 第h+1层共有叶子结点(失败结点) 2 ( [ m / 2 ] ) h − 1 2([m/2])^{h-1} 2([m/2])h1个,
  • n个关键字的B树必有n+1个叶子结点,则 n + 1 > 2 ( [ m / 2 ] ) h − 1 n+1> 2([m/2])^{h-1} n+1>2([m/2])h1
  • h ≤ l o g [ m / 2 ] ( n + 1 ) / 2 + 1 h ≤ log_{[m/2]}{(n+1)/2}+1 hlog[m/2](n+1)/21

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

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

相关文章

新手怎样快速上手接口测试?掌握这几个知识点直接起飞!

接口测试是测试系统组件间接口的一种方式&#xff0c;接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是检查数据的增删改查操作&#xff0c;以及系统之间的逻辑关系等。 接口的几种类型 接口的类型包括&#xff1a;post &#xff0c;get&…

Postman应用——控制台调试

当你在测试脚本中遇到错误或意外行为时&#xff0c;Postman控制台可以帮助你识别&#xff0c;通过将console.log调试语句与你的测试断言相结合&#xff0c;你可以检查http请求和响应的内容&#xff0c;以及变量之类的。 通常可以使用控制台日志来标记代码执行&#xff0c;有时…

Golang gorm 一对一关系

一对一关系 一对一关系比较少&#xff0c;一般用于表的扩展例如一张用户表&#xff0c;有很多字段那么就可以把它拆分为两张表&#xff0c;常用的字段放主表&#xff0c;不常用的字段放详情表。 针对用户表来说可以通过user去点出userinfo。 创建表和插入数据 package mainimp…

一款超强的 Python 分析工具!

这是一个star暴增的项目&#xff1a;PyGWalker&#xff0c;也是目前看来更加轻量级的分析工具&#xff01; 之前我们的数据分析思路是&#xff1a; 1、利用 R 或者 Python 进行数据分析‍ 2、利用沉跌跌的工具进行数据分析&#xff0c;比如&#xff1a;tableau 今天介绍的*…

Hive 数据仓库介绍

目录 ​编辑 一、Hive 概述 1.1 Hive产生的原因 1.2 Hive是什么&#xff1f; 1.3 Hive 特点 1.4 Hive生态链关系 二、Hive架构 2.1 架构图 2.2 架构组件说明 2.2.1 Interface 2.2.1.1 CLI 2.2.1.2 JDBC/ODBC 2.2.1.3 WebUI 2.2.2 MetaData 2.2.3 MetaStore 2.2…

tokenizers总结

简介 tokenize的目标是把输入的文本流&#xff0c;切分成一个个子串&#xff0c;每个子串相对有完整的语义&#xff0c;便于学习embedding表达和后续模型的使用。 tokenize有三种粒度&#xff1a;word/subword/char word词&#xff0c;是最自然的语言单元。对于英文等自然语…

通过数据导入导出功能批量重命名文件名称更简单

在日常工作中&#xff0c;我们经常需要对大量的文件进行重命名&#xff0c;以方便管理和查找。然而&#xff0c;手动一个一个修改文件名称的方式不仅费时费力&#xff0c;而且容易出错。为了提高工作效率&#xff0c;我们可以使用一款名为“固乔文件管家”的软件来实现文件的批…

【MySQL多表查询以及事务、索引】

1. 多表查询 1.1 概述 1.1.1 数据准备 #建议&#xff1a;创建新的数据库 create database db04; use db04;-- 部门表 create table tb_dept (id int unsigned primary key auto_increment comment 主键ID,name varchar(10) not null unique comment 部门名称…

基于自编译的onlyoffice镜像,关于修改字体的问题

基于自编译的onlyoffice镜像&#xff0c;关于修改字体的问题 自编译onlyoffice镜像来自于 https://blog.csdn.net/Gemini1995/article/details/132427908 该镜像里面没有documentserver-generate-allfonts.sh文件&#xff0c;所以需要自己创建一个&#xff08;建议放在/usr/b…

C++笔记之引用折叠规则

C笔记之引用折叠规则 文章目录 C笔记之引用折叠规则1. 当两个左值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。2. 当一个左值引用和一个右值引用结合在一起时&#xff0c;它们会折叠成一个左值引用。3. 当两个右值引用结合在一起时&#xff0c;它们也会折叠成一个右…

Mybatis学习笔记9 动态SQL

Mybatis学习笔记8 查询返回专题_biubiubiu0706的博客-CSDN博客 动态SQL的业务场景&#xff1a; 例如 批量删除 get请求 uri?id18&id19&id20 或者post id18&id19&id20 String[] idsrequest.getParameterValues("id") 那么这句SQL是需要动态的 还…

CI/CD与DevOps:您需要知道的8个核心区别

CI/CD是一种让程序员能迅速并可靠地更新代码的做法。而DevOps则包括一系列方法和思想&#xff0c;这些让开发和运维的人都能更好地协作&#xff0c;使得整个产品从设计到使用都能更加高效地完成。尽管CI/CD和DevOps都是为了让软件开发更高效&#xff0c;但它们在具体怎么做上有…

苹果mac笔记本部分按键失灵怎么回事?5连option键即可解决

苹果mac部分按键突然失灵怎么办&#xff1f; 使用万能的重启大法&#xff0c;数字键 7,8,9 以及 m 等按键失灵&#xff0c;但是其他按键正常。 使用外接键盘发现是可以正常输入的&#xff0c;难道是笔记本键盘坏了&#xff1f;要去售后维修吗&#xff1f; 苹果mac笔记本部分按…

解决Python中的JSON序列化Bug TypeError: Object of type ‘int64‘ is not JSON serializable

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

9_16搜索练习

填涂颜色 此时的递归是可以停下来的&#xff0c;我们需要做到开工没有回头箭&#xff08;不能让他往回走&#xff09; 此处使用的1标记走过的点&#xff0c;&#xff01;0证明走过&#xff0c;走过就停 #include <bits/stdc.h> using namespace std; int a[32][32],b[32]…

看期权哪个软件更好用?数据比较全面直观的那种?

在介绍期权看盘软件之前&#xff0c;我们先来了解一下期权交易的发展史。2015年&#xff0c;国内首只期权上市交易&#xff0c;2019年深交所期权上市&#xff0c;期权市场越来越火&#xff0c;期权分仓软件也是横空出世发展至今&#xff0c;下文介绍看期权哪个软件更好用&#…

链路聚合和VRRP链路聚合

目录 链路聚合 基本术语 配置链路聚合的条件 手工模式 负载分担 LACP模式 活动链路的选举 LACP模式配置 VRRP VRRP的基本概念 VRRP的定时器 VRRP的主备选举 VRRP主备切换 VRRP抢占模式(Preempt Mode) : VRRP监视上行端口 VRRP和MSTP结合应用 VRRP的基本配置 …

信息安全 科技评估分类

声明 本文是学习GB-T 42776-2023 科技评估分类. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 6 编码方法 科技评估分类代码由基本分类代码和7个附加分类代码组成&#xff0c;代码结构如图2所示。 图 2 科技评估分类代码结构图 GB/T 42776—2023 …

uniapp——实现base64格式二维码图片生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.base64生成…

go语言---锁

什么是锁呢&#xff1f;就是某个协程&#xff08;线程&#xff09;在访问某个资源时先锁住&#xff0c;防止其它协程的访问&#xff0c;等访问完毕解锁后其他协程再来加锁进行访问。这和我们生活中加锁使用公共资源相似&#xff0c;例如&#xff1a;公共卫生间。 死锁 死锁是…