B树及应用

B树:原理、操作及应用 在现代计算机科学中,高效的数据存储和检索是许多应用程序成功的关键。B树(B-tree)是一种自平衡的树,它能够保持数据稳定有序,其插入与查询的时间复杂度都是对数级别的,非常适合于磁盘等辅助存储器的存取系统。本文将详细介绍B树的基本原理、基本操作,并通过伪代码和C代码示例来解释其实现。 阅读详情

B树

B树是为磁盘或其他直接存取辅助存储设备而设计的一种平衡搜索树。B树类似于红黑树,但B树在降低I/O操作方面更好。许多数据库系统使用B树或B树的变种来存储信息

B树与红黑树的不同在于B树的节点可以有多个孩子,一个B树的子节点可以相当大,通常依赖于所使用的磁盘单元特性。一颗含有n个节点的B树其高度为O(lgn)。一颗B树严格高度可能比一颗红黑树的高度小很多,因为其子节点可以有多个。我们可以使用B树在时间O(lgn)内完成一些动态集合操作
在这里插入图片描述
如图,B树的内部节点x包含x.n个关键字,那么节点x就有x.n+1个孩子。节点x中关键字就是分隔点,把节点x所处理的关键字的属性分隔为x.n+1个子域,每个子域都由x的一个孩子处理。当在一颗B树中搜索某个关键字,将在x中的x.n个关键字做比较,确定一个(x.n+1)路的选择。但叶节点的结构与内部节点的结构不同

辅存上的数据结构

磁存储技术(磁盘或磁带等)容量通常比主存高出两个数量级,而每位的存储代价比主存低一个数量级。由于磁盘的构成决定其比主存要慢很多,磁盘读取数据时需要旋转磁盘和移动磁臂,这两个机械运动将占用一定时间。目前商业磁盘转速5400~15000 转/分钟(RPM),15000RPM用于服务器级的驱动,7200RPM用于台式机上,5400RPM用于笔记本。7200RPM旋转一圈需要8.33ms,比硅存储存取50ns要高5个数量级。商用磁盘平均存取时间在8~11ms

为摊还机械运动所花费等待时间,磁盘一次读取多个数据项。信息被分为一系列相等大小的在柱面内连续出现的位页面,每个磁盘读或写一个或多个完整的页面。一般一页的长度为211~214字节

在一个典型的B树应用中,需要处理的数据量非常大,所有数据无法一次装入主存。B树算法将所需页面从磁盘复制到主存,然后将修改过的页面写回磁盘。任何时刻B树算法都只需要在主存中保持一定数量的页面。因此主存的大小并不限制被处理B树的大小

设x为指向一个对象的指针,如果该对象已经在内存中,则可以直接访问其属性,但如果不在,则需要先执行DISK-READ(x)操作,将对象读入主存中。操作DISK-WRITE(x)完成对像x的属性修改保存,一个对象操作的典型模式如下:

    x = a pointer to some object
    DISK-READ(x)
    访问或修改x属性
    DISK-WRITE(x)

在大多数操作系统中,一个B树算法的运行时间主要由所执行的DISK-READ和DISK-WRITE操作次数决定,我们希望每次能够尽可能多的读取或写入数据。一个B树节点通常和一个完整磁盘一样大,磁盘页的大小限制一个B树节点可以含有的孩子数

对存储在磁盘上一颗大的B树,通常分支因子在50~2000之间,具体取决于一个关键字相对于一页的大小。一个大的分支因子可以大大降低树的高度及查找任何一个关键字所需的磁盘存储次数

B树定义

任何和关键字相关联的卫星数据都将与关键字存储在同一个节点。比如B树的变种,B+树就是把所有卫星数据都存储在叶节点上,以最大化内部节点的分支因子

一颗B树T是具有以下性质的有根树(根为T.root)

  • 每个节点x有下面属性

    • x.n,当前存储在节点x中的关键字个数

    • x.n个关键字本身x.key1, x.key2, …, x.keyx.n,以非降序存放,x.key1 <= x.
      key2 <= … <= x.keyx.n

    • x.leaf,布尔值,x为叶节点,则为TRUE;x为内部节点,则为FALSE

  • 每个内部节点x,包含x.n + 1个指向其孩子的指针x.c1, x.c2, …, x.cx.n+1。叶节点没有孩子,其ci属性没有定义

  • 关键字x.keyi对存储在各个子树中的关键字范围加以分隔:如果k1为任意一个存储在以x.ci为根的子树中的关键字,则ki <= x.key1 <= k2 <= x.key2 <= … <= x.keyx.n <= kx.n+1

  • 每个叶节点具有相同的深度,即树的高度h

  • 每个节点所包含的关键字个数有上界和下界。用一个被称为B树的最小度数的固定整数t>=2来表示

    • 除根节点以外的每个节点必须至少有t-1个关键字,除根节点以外的每个内部节点至少有t个孩子。如果树非空,根节点至少有一个关键字

    • 每个节点至多可以包含2t-1个关键字,一个内部节点至多可有2t个孩子,当一个节点恰好有2t-1个关键字时,称该节点是满的

t=2时的B树是最简单的。每个内部结点有2、3、或4个孩子,即一颗2-3-4树。在实际中,t值越大,B树高度越小

B树高度

B树上大多数操作所需的磁盘存取次数是与B树高度成正比

如果n>=1,那么对任意一颗包含n个关键字、高度为h、最小度数t>=2的B树T,有h<=logt(n+1)/2

由于B树的高度公式可知,当t变大时高度再减少,相较于红黑树的高度,B树的高度可以很低。因此B树避免了大量的磁盘访问

B树上的基本操作

在讨论B树的基本操作前,我们约定

  • B树的根节点始终在主存中,无需对根做DISK-READ操作,当根节点被改变后,需要对根节点做一次DISK-WRITE操作

  • 任何当作参数传递的节点在传递之前,都需要对他们做一次DISK-READ操作

搜索B树

搜索B树与搜索二叉树类似,只是B树搜索时,每个节点做的不是二路分支选择,而是(x.n+1)路分支选择

B-TREE-SEARCH是定义在二叉搜索树上的TREE-SEARCH过程的一个推广。输入为指向某个子树根节点x的指针,及需要在该子树中搜索的一个关键字k。如果k在B树中,则返回节点y和使得y.keyi = k的下标i组成的有序对(y, i);否则,返回NIL

B-TREE-SEARCH(x, k)
1 i = 1
2 while i <= x.n and k > x.key<sub>i</sub>
3   i = i + 1
4 if i <= x.n and k == x.key<sub>i</sub>
5   return(x, i)
6 else if x.leaf
7   return NIL
8 else DISK-READ(x, c<sub>i</sub>)
9   return B-TREE-SEARCH(x.c<sub>i</sub>, k) 

B树搜索过程构成一条从树根向下的简单路径。在B-TREE-SEARCH过程访问的磁盘页面数为O(h) = O(logtn),h为B树的高,n为B树所含关键字个数。由于x.n<2t,在2~3行的循环每个节点中花费的时间为O(t),总的CPU时间为O(th) = O(t*logtn)

创建一颗空的B树

为创建一颗B树T,先用B-TREE-CREATE来创建一个空的根节点,然后调用B-TREE-INSERT来添加新的关键字。在此过程中需要使用ALLOCATE-NODE,其在O(1)时间内为新节点分配一个磁盘页

B-TREE-CREATE
1 x = ALLOCATE-NODE()
2 x.leaf = TRUE
3 x.n = 0
4 DISK-WRITE(x)
5 T.root = x

向B树中插入一个关键字

B树中插入一个关键字要比二叉搜索树中插入一个关键字复杂得多。在B树中,不能简单创建一个新的叶结点插入,这样将B树变得不合法。我们会将新的关键字插入一个已经存在的叶结点。但我们不能将关键字插入一个满的叶结点,因此我们引入一个操作,将一个满的结点y(2t-1个关键字)按其中间关键字y.keyt分裂为两个各含t-1个关键字的结点。中间关键字被提升到y的父节点,用于标识两颗新树的划分点。如果y的父结点也是满的,则需要插入新的关键字之前将其分裂,
最终满结点的分裂会沿树向上传播

在B树中实际插入新关键字,是从根节点开始向下查找,并将查找过程中遇到的每个满结点分裂,直到插入新关键字为止

分裂B树中的结点

过程B-TREE-SPLIT-CHILD输入是一个非满的内部结点x和一个使x.ci为x的满子节点的下标i。此过程这个子节点分裂成两个,并调整x,使其包含多出来的孩子。要分裂一个满的根,需要让根成为一个新的空根结点的孩子,才能使用B-TREE-SPLIT-CHILD。树的高度也因此增加1,分裂是树长高的唯一途径

满节点y=x.ci按照其中间关键字S进行分裂,S被提升到y的父节点x,y中大于中间关键字的关键字都置于一个新的节点z中,成为x的一个新孩子

B-TREE-SPLIT-CHILD(x,i)
1   z = ALLOCATE-NODE()
2   y = x.c<sub>i</sub>
3   z.leaf = y.leaf
4   z.n = t - 1
5   for j = 1 to t - 1
6     z.key<sub>j</sub> = y.key<sub>j + 1</sub>
7   if not y.leaf
8     for j = 1 to t
9       z.c<sub>j</sub> = y.c<sub>j + 1</sub>
10  y.n = t - 1
11  for j = x.n + 1 downto i + 1
12  x.c<sub>j + 1</sub> = x.c<sub>j</sub>
13  x.c<sub>i + 1</sub> = z
14  for j = x.n downto i
15    x.key<sub>j + 1</sub> = x.key<sub>j</sub>
16  x.key<sub>i</sub> = y.key<sub>t</sub>
17  x.n = x.n + 1
18  DISK-WRITE(y)
19  DISK-WRITE(z)
20  DISK-WRITE(x)

B-TREE-SPLIT-CHILD过程中,x是被分裂的结点,y是x的第i个孩子。开始结点y有2t个孩子,2t-1个关键字,在分裂后减少至t个孩子,t-1个关键字。结点z取走y的t个最大的孩子,t-1个关键字,并且z成为x的新孩子,它在x的孩子表中仅位于y之后。y的中间关键字上升到x中,成为分隔y和z的关键字

以沿树单程下行方式向B树插入关键字

在一颗高度为h的B树中,以沿树单程下行方式插入一个关键字k的操作需要O(h)次磁盘存取。所需的CPU时间为O(th)=O(tlogtn)。过程B-TREE-INSERT利用B-TREE-SPLIT-CHILD来保证递归始终不会降至一个满结点上

B-TREE-INSERT(T, k)
1   r = T.root
2   if r.n == 2t - 1
3     s = ALLOCATE-NODE()
4     T.root = s
5     s.leaf = FALSE
6     s.n = 0
7     s.c1 = r
8     B-TREE-SPLIT-CHILD(s, 1)
9     B-TREE-INSERT-NONFULL(s. k)
10  else B-TREE-INSERT-NONFULL(r, k)

第3~9行处理根节点为满的情况,原来的根节点被分裂,一个新的节点s成为根。对根进行分裂是增加B树高度的唯一途径。与二叉搜索树不同,B树高度的增加发生在顶部而不是底部。过程通过调用B-TREE-INSERT-NONFULL完成将关键字k插入以非满的根节点为根的树中,在需要时沿树向下递归,通过B-TREE-SPLIT-CHILD来保证任何时刻所递归处理的节点都是非满的。辅助过程B-TREE-INSERT-NONFULL将关键字插入节点x,要求调用该过程时x是非满的

B-TREE-INSERT-NONFULL(x, k)
1   i = x.n
2   if x.leaf
3       while i >= 1 and k < x.key<sub>i</sub>
4          x.key<sub>i + 1</sub> = x.key<sub>i</sub>
5          i = i - 1
6       x.key<sub>i + 1</sub> = k
7       x.n = x.n + 1
8       DISK-WRITE(x)
9   else while i >= 1 and k < x.key
10        i = i -1
11      i = i + 1
12      DISK-READ(x.c<sub>i</sub>)
13      if x.c<sub>i</sub>.n == 2t - 1
14        B-TREE-SPLIT-CHILD(x, i)
15        if k > x.key<sub></sub>
16           i = i + 1
17      B-TREE-INSERT-NONFULL(x.ci, k)    

第3~8行处理x为叶节点情况,将关键字k插入x。如果x不是叶节点,则必须将k插入以内部节点x为根的子树中适当的叶节点中去。第9~11决定向x的哪个子节点递归下降。第13行检查是否是递归降至满节点上。若是则第14行用B-TREE-SPLIT-CHILD将该子节点分裂为两个非满的孩子,第15~16确定向两个孩子中的哪个下降。第17行递归将k插入合适的子树中

对一颗高度为h的B树来说,B-TREE-INSERT要做O(h)次磁盘存取,因为每次调用B-TREE-INSERT-NONFULL之间,只做O(1)次DISK-READ和DISK-WRITE操作。所占用的总CPU时间为O(th) = O(tlogn)。因为B-TREE-INSERT-NONFULL是尾递归,所以也可以用while循环实现。在任何时刻需要留在主存中的页面数为O(1)

从B树中删除关键字

相较于B树的插入操作,删除操作显得更加复杂。因为可以从任何一个节点删除一个关键子,而不必必须是叶节点,而且在内部删除一个关键字后,还需要考虑从新安排这个节点的孩子。防止因删除而导致树的结构违反B树性质,就像不能因插入一个关键字而使节点变得太大一样,也不能因为删除一个关键字变得太小,根节点除外,根节点关键字个数可以少于t-1个。

过程B-TREE-DELETE从以x为根的子数中删除关键字k。节点x递归调用自身时,x中关键字个数至少为最小度t。这个条件要求比通常B树中的最少关键字个数多一个以上,使得有时在递归下降至子节点前,需要将一个关键字移到子节点中。如果根节点x成为一个不含任何关键字的内部节点,那么x就要被删除,x的唯一孩子x.c1成为树的新根,从树的高度降低1,同时也维持树根必须包含至少一个关键字的性质

从B树中删除关键字的各种情况

  • 如果关键字k在节点x中,并且x是叶节点,则从x中删除k

  • 如果关键字k在节点x中,并且x是内部节点,则需要做如下操作

    • 如果节点x中前于k的子节点y至少包含t个关键字,则找出k在以y为根的子树中的前驱k’。递归删除k’,并在x中用k’代替k

    • 对称地,如果y有少于t个关键字,则检查节点x中后于k的子节点z。如果z至少有t个关键字,则找出k在以z为根的子树中的后续k’,递归删除k’,并在x中用k’代替k

    • 如果y和z都只含有t-1个关键字,则将k和z的全部合并进y,这样x就失去了k和指向z的指针,并且y现在包含2t-1个关键字。然后释放z并递归从y中删除k

如果关键字k当前不在内部节点x中,则确定必包含k的子树的根x.ci,如果x.ci只有t-1个关键字,必须执行下面的步骤1或者步骤2来保证降至一个至少包含t个关键字的节点。然后对x的某个合适的子节点进行递归而结束

  • 如果x.ci只含有t-1个关键字,但其一个相邻的兄弟至少包含t个关键字,则将x中的某个关键字降至x.ci中,将x.ci的相邻兄弟中的一个的关键字升至x,将该兄弟中相应的孩子指针移到x.ci,这样使得x.ci增加一个额外的关键字

  • 如果x.ci以及x.ci的所有相邻兄弟都是包含t-1个关键字,则将x.ci与一个兄弟合并,即将x的一个关键字移至新合并的节点,使之成为该节点的中间关键字

一颗B树中的大部分关键字都在叶节点,在实际删除操作中,经常都是从叶节点中删除关键字。这样B-TREE-DELETE过程只要沿树下降一趟即可,不需要向上回溯。当删除某个内部节点关键字时,过程也是沿树下降一趟,但可能需要返回删除了关键字的那个节点,以用其前驱或后续来取代被删除的关键字

在对一颗高度为h的B树进行删除关键字操作,只需要O(h)次磁盘操作,在递归调用该过程之间,仅需O(1)次对DISK-READ和DISK-WRITE的调用,所需CPU时间为O(th)=O(tlogtn)

B树的java实现

具体实现请点击详情获取

自然语言处理6 -- 情感分析 1 概述 情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评价,可以分析菜品口味、送达时间、送餐态度、菜品丰富度等多个维度的用户情感指数,从而从各个维度上改进外卖服务。 情感分析可以采用基于情感词典的传统方法,也可以采用基于深度学习的方法,下面详细讲解 ... 阅读详情

相关推荐

AD创建属于自己的元件库(详细)

我今天开始学习AD2022,但是我想自己创建属于自己的元件库,但是奈何找了好多教程就是随便几句话就把我打发走了,弄了一天都没搞定(也许是我比较菜),所以现在乱懂了,自己写一个属于我们自己小白的教程,希望有用吧哈哈我比较偷懒,直接使用嘉立创上画好的元件导入,和我们自己创建自己画的步骤其实都一样。

qq_33591173的博客 2万+

B树,B+树,红黑树应用场景笔记

一、B树的应用 1、B树大量应用在数据库和文件系统当中。 它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。B树算法减少定位记录时所经历的中间过程,从而加快存取速度。 假定一个节点可以容纳100个值,那么3层的B树可以容纳100万个数据,如果换成二叉查找树,则需要20层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在100万个数据中查找目标值...

田园园野的博客 2万+

SAP-ABAP:SAP中如何查看系统表之间的关联关系?

在业务逻辑开发或者ALV开发过程中,我们通常要从系统中找出几个标准表之间的关联关系,有的是head与item,通过外键进行关联的关系。那么怎么去找到呢?以上就是具体如何产看系统表之间的关联关系的步骤,对于不同代码的业务顾问,也是必须要掌握的。

LinkStar的博客 2430

B-树和B+树的应用:数据搜索和数据库索引

B-树 1 .B-树定义:有序数组+平衡多叉树 B-树是一种平衡的多路查找树,它在文件系统中很有用。 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树; ⑵若根结点不是叶子结点,则至少有两棵子树; ⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树; ⑷所有的非终端结点中包含以下信息数据: (n,A0,K1,A...

黄规速博客:学如逆水行舟,不进则退 8万+

图像去雾新思路:手把手教你复现DEA-Net中的“细节增强卷积”与PyTorch实现

本文详细解析了DEA-Net中的'细节增强卷积'(DEConv)与PyTorch实现,通过多分支差分卷积和重参数化技术,显著提升单图像去雾效果。文章从数学原理到代码实现,手把手指导复现这一创新架构,帮助开发者在保持轻量化的同时实现41dB以上的PSNR指标,适用于自动驾驶、遥感监测等关键领域。

weixin_30323631的博客 506

为什么需要知识图谱?什么是知识图谱?——KG的前世今生

我的知乎专栏,对知识图谱感兴趣的朋友可以关注。标题的命名顺序可能让有的读者不太习惯。通常在介绍一个陌生事物的应用前,我们先给出其定义。之所以换个顺序,是为了不让读者一开始就接触比较冰冷生硬的概念刻板描述(后面我尽量用更具体、准确的例子来表达),另一方面也是为了通过现实生活中的例子自然的引入知识图谱的概念。希望通过这种方式加深读者的印象和理解。为了减轻读者理解的负担,我尽可能地避免引入过多的概念和技术

SimmerChan的专栏 8万+

B树的概念及应用

B+树: B树和B+树的对比: B+树在数据库中的应用:

regens的博客 884

告别USB转接:在STM32探索板上用SPI跑通ESP-Hosted,实现Wi-Fi/BLE连接

本文详细介绍了如何在STM32F469I-DISCO开发板上通过SPI接口实现ESP-Hosted方案,为嵌入式设备添加Wi-Fi和蓝牙连接功能。通过硬件配置、协议栈优化和性能测试,展示了这一创新方案的成本效益和开发效率,特别适合资源受限但需要稳定无线连接的嵌入式应用场景。

weixin_34046298的博客 253

数据检索的优化之道:B树与B+树的深度解析与应用探索

在信息时代,数据检索的速度和效率对于任何依赖数据处理的系统来说都至关重要。无论是在线搜索引擎、数据库管理系统还是文件存储系统,快速准确地检索所需数据都是核心需求。传统的线性数据结构在处理大规模数据集时往往力不从心,因此,高效的索引结构成为了优化数据检索的关键。本文将深入探讨B树和B+树这两种数据结构,分析它们如何提升数据检索的性能,并探索它们在实际应用中的广泛作用。

蜗牛的博客 2386

视频帧插学习(三):ema-vfi代码拆解和分析

video interp EMA-VFI

mikhailbran的博客 712

OpenHarmony AI系列:神经网络处理单元(NPU)驱动架构与实现详解

NPU(Neural Processing Unit,神经网络处理单元)是专门为神经网络计算设计的硬件加速器。在OpenHarmony系统中,NPU驱动是通过NNRT(Neural Network Runtime,神经网络运行时)框架实现的,它作为中间桥梁连接上层AI推理框架和底层NPU硬件,实现AI模型的跨芯片推理计算。

m0_67505153的博客 665

B树、B+树、B*树(原理、应用等)

B树、B+树、B*树等代码实现、操作、原理、应用

lll_666666的博客 2481

51智能小车(双轮)

前几天接了个小单子,是一个基于51单品机的作品,发现自己对小车的认识还是不太🆗。也算是完成了任了的;欢迎各位小伙伴来多多交流,大家一起进步。最后有需要单片机课程设计的小伙伴滴滴我哦(有偿)。企鹅:2397746994。

qq_56992543的博客 2348

简单了解B+树和B*树及B树的应用

B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;B*树:一棵更丰满的,空间利用率更高的B+树。mysql是目前非常流行的开源关系型数据库,不仅是免费的,可靠性高,速度也比较快,而且拥有灵活的插件式存储引擎,如下:MySQL中索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。注意:索引是基于表的,而不是基于数据库的。

sqm_C的博客 1162

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

浅谈AVL树,红黑树,B树,B+树原理及应用

背景:这几天在看《高性能Mysql》,在看到创建高性能的索引,书上说mysql的存储引擎InnoDB采用的索引类型是B+Tree,那么,大家有没有产生这样一个疑问,对于数据索引,为什么要使用B+Tree这种数据结构,和其它树相比,它能体现的优点在哪里? 看完这篇文章你就会了解到这些数据结构的原理以及它们各自的应用场景. 二叉查找树 简介 二叉查找树也称为有序二叉查找树,满足二叉查

杨龙飞的博客 3万+

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

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

B树的原理及代码实现、B+树和B*树介绍及应用

B树主要用于磁盘文件的检索操作。众所周知,平衡二叉树(AVL树、红黑树)搜索的时间复杂度是O(log^n)。虽然很快,但如果数据在磁盘中且有上亿量级的数据,即便只有30次左右的IO操作,速度也是非常慢的。因为磁盘IO速度极慢,主要是寻道操作影响,平均8ms左右。因此,磁盘数据的检索不适合使用平衡二叉树,B树正式上线。B树可以看成是压缩版的平衡二叉树,每一个节点上都有保存有多个值,且有多个叶子节点。一般而言,B树的检索次数在个位量级,这取决于每个节点上能保存多少个值。

weixin_61857742的博客 2508

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

B树实现,B*,B+树介绍,B树应用

一、B树概念 1970年,R.Bayer和E.mccreight提出了一种适合外查找的树,它是一种平衡的多叉树,称为B树(有些地方写的是B-树,注意不要误读成"B减树")。一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质: 根节点至少有两个孩子 每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子 每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以升序排列 key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1

weixin_43886592的博客 830

B树、B+树原理及其应用

一、B树的应用 1、B树大量应用在数据库和文件系统当中。 它的设计思想是,将相关数据尽量集中在一起,以便一次读取多个数据,减少硬盘操作次数。B树算法减少定位记录时所经历的中间过程,从而加快存取速度。 假定一个节点可以容纳100个值,那么3层的B树可以容纳100万个数据,如果换成二叉查找树,则需要20层!假定操作系统一次读取一个节点,并且根节点保留在内存中,那么B树在100万个数据中查找目标值...

lqj701的博客 1221

【树形结构】B树 {B树的概念;B树的实现:节点设计,查找,插入,遍历,删除;B树的性能分析;B+树和B*树;B树的应用}

【树形结构】B树 {B树的概念;B树的实现:节点设计,查找,插入,遍历,删除;B树的性能分析;B+树和B*树;B树的应用}

52Herzt的博客 1420

B+树B-树的应用

B-树 1 .B-树定义 B-树是一种平衡的多路查找树,它在文件系统中很有用。 定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树: ⑴树中每个结点至多有m 棵子树; ⑵若根结点不是叶子结点,则至少有两棵子树; ⑶除根结点之外的所有非终端结点至少有[m/2] 棵子树; ⑷所有的非终端结点中包含以下信息数据:       (n,A0,K1,A

hijiankang的专栏 9978

【高阶数据结构-B树】B树的介绍+代码实现+(B+树与B*树)+MySQL中B树的应用

B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;B*树:一棵更丰满的,空间利用率更高的B+树。mysql是目前非常流行的开源关系型数据库,不仅是免费的,可靠性高,速度也比较快,而且拥有灵活的插件式存储引擎,如下:MySQL中索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。注意:索引是基于表的,而不是基于数据库的。

2202_75331338的博客 1213

B树、B+树分析及应用

我们都是知道MySQL的索引存储使用的是B+树的结构,想要搞懂MySQL的索引,我们需要先搞清楚B+树,而B+树是B树演变而来的,所以我们又必须先搞懂B树。 我们通常见到的二叉树、红黑树这些是二叉的,就是一个节点可以有两个子节点,而B树是多叉的,就是一个节点能有多个子节点。 B树的定义:(源自百度百科) B树是一种平衡的多叉树,一棵m阶B树(balanced tree of order m)...

cao447214075的专栏 2340

B树、B+树、B*树以及在数据库索引的应用

1.背景:动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。但是咱们有面对这样一个...

weixin_34092370的博客 291

【B树和B+树数据结构及其应用】

B树和B+树是一种高效的数据结构,它们在数据库索引、文件系统等领域具有广泛的应用。了解和掌握B树和B+树的原理和应用,有助于提高编程能力和解决实际问题。在实际开发过程中,可以根据具体需求选择合适的数据结构来提高程序的性能和可维护性。

我是Java程序员廖志伟,感谢朋友们的支持! 1327

B树和B+树的区别及B+树的应用

前言 很多文章写一个知识点都是长篇大论,给我的记忆增加了很大的压力,所以我想就尽量精简的说明一个问题,一方面是为自己的记忆减轻压力,另一方面也是为各位道友提供一个快速掌握核心的地方。每个知识点尽量控制在一个图,多个点,每个点字数尽可能的简短。 一、B树 (1)B树也叫B-树 (2)叶子节点不存储数据 (3)关键字和数据都在节点中存放 (4)每个节点中的关键字有序 (5)每个节点的关键字个数不能超过m个(m代表B树的阶数) 二、B+树 (1)每个结点至多有m个子女; (2)除根结点外,每个结点至少有[m/2]

just_for_that_moment的博客 873

探索树结构及其应用:从二叉树到B树、B+树和B*树

树是一种非线性的数据结构,由节点和边组成。树中的每个节点可以有零个或多个子节点,而节点之间通过边连接,形成层次结构。二叉树是一种特殊的树结构,每个节点最多有两个子节点:左子节点和右子节点。二叉树的特点包括有序性和递归性。B*树是Oracle数据库中使用的一种索引结构,用于优化大型数据库的查询性能。B*树是一种多维的、自适应的树结构,能够高效地处理多个查询条件。二叉树适用于表示层级关系,B树适用于有序数据的存储和检索,B+树适用于范围查询和排序操作,B*树通过优化内部节点的填充度进一步提高了查询性能。

创意程序员的博客 1097
上一篇: 管理Kafka集群
下一篇: ArraList源码分析
炒栗子不加糖
博客等级 码龄10年 68粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值