📜  关于 B 和 B+ 树的练习题

📅  最后修改于: 2021-09-09 10:44:08             🧑  作者: Mango

在本文中,我们将讨论基于 B 和 B+ 树的不同类型的问题。在理解本文之前,您应该了解 B 和 B+ 树的基础知识(参见:介绍、插入、删除)。

这些是 GATE 中基于 B 和 B+ 树提出的问题类型。

类型 1. 基于 B 和 B+ 树中键的顺序和数量 –
这些是与键的顺序和数量相关的几个关键点:

  • 具有顺序 p 的 AB/B+ 树具有最大 p 个指针,因此最大 p 个孩子。
  • 具有顺序 p 的 AB/B+ 树具有最小的 ceil(p/2) 指针,因此具有最小的 ceil(p/2) 子节点。
  • 具有顺序 p 的 AB/B+ 树具有最大 (p – 1) 和最小 ceil(p/2) – 1 个键。

Que – 1.考虑一个 B+-tree,其中一个节点中的最大键数为 5。任何非根节点中的最小键数是多少? (GATE CS 2010)
(一) 1
(乙) 2
(三) 3
(四) 4

解决方案:假设 B+ 树的顺序为 p,最大键数将为 (p – 1)。据了解,
p – 1 = 5 => p = 6
因此,最少的键数:
ceil(p/2) – 1 = 2

类型 2. 基于在 B/B+ 树中插入一个键 –
给定 B/B+ 树的顺序和要插入的键,可以要求找到结果 B/B+ 树或 B/B+ 树的高度。

Que – 2.考虑下面的 2-3-4 树(即最小度数为 2 的 B 树),其中每个数据项都是一个字母。通常的字母顺序用于构建树。
1

在上面的树中插入G的结果是什么?
(一种)
2
(二)
3
(C)
4
(D) 无

解:由于给定的 B 树的最小度数为 2,最大度数或阶数将是 2*2 = 4。因此,它最多有 4 个指针或 3 个键。
我们将从根遍历直到要插入 G 的叶节点。由于 G 小于 L,它将被插入到具有元素 BHI 的叶节点中。插入 G 后,排序后的叶节点将是 BGHI,导致溢出。它将被分成两部分 BG 和 I,中间元素 H 将被发送到其父节点,如下所示:

5

现在带有键 H、L、P、U 的根节点溢出,导致根节点分裂成两部分 HL 和 U,中间元素 P 将是与选项 B 匹配的根节点。
笔记:

  • 插入 G 时会发生 2 次分裂。
  • 在插入G之前B树的高度为1(从根节点到叶子节点的路径)。插入G后,B树的高度达到2。

类型 3. 基于在 B/B+ 树中搜索一个键 –
这些是与在 B/B+ 树中搜索相关的关键点:

  • 为了在 B 树中搜索关键字,我们从根节点开始遍历,直到找到关键字或到达叶节点。
  • 为了在 B+ 树中搜索一个键,我们从根节点开始遍历直到到达叶节点,因为每个键都存在于叶节点中。此外,叶节点相互连接,这有助于更快地访问范围查询的数据。

Que – 3.参考下图所示的 1 阶 B+ 树索引,为了满足以下查询,必须获取的最小节点数(包括根节点):“获取搜索关键字大于或等于 7 且小于 15″ 是 ____。 (GATE-CS-2015)
6

(一) 4
(乙) 5
(三) 6
(四) 7

解决方案:首先我们将搜索等于 7 的键。为了找到 7,我们将从根节点开始,移动到键为 5 的节点,然后移动到键为 5 和 7 的叶节点。因此,为了搜索 7,我们需要访问3个节点。

搜索到 7 后,我们可以转到包含键 9 和 11 的下一个叶节点。由此,我们可以转到键为 13 和 15 的叶节点。由于我们希望键小于 15,因此可以到此为止。因此,访问的总节点数 = 3(搜索 7 个)+ 2(查找小于 15 个的键)= 5。

7

注意:如果我们使用 B 树,那么我们需要单独搜索 7、8、9、10、11,因为哪个节点访问会更高。因此,范围查询首选 B+ tee。

类型 4. B/B+ 树中的节点分裂计数 –

Que – 4. 4阶 B 树是通过 10 次连续插入从头构建的。可能发生的最大节点分裂操作数是多少? (GATE CS 2008)
(一) 3
(乙) 4
(三) 5
(四) 6

解: 4阶AB树最多可以有3个key。

8

9

前 3 个插入不会有任何分裂,如图 (a) 所示。
在插入第 4 个元素时,将有 1 个分割,如图 (b) 所示。
在插入第 5 个元素时,不会有分裂,但我们将插入具有最大元素的叶节点,以在进一步插入时产生更多分裂,如图 (c) 所示。
在插入第 6 个元素时,将有 1 个分割,如图 (d) 所示。
在插入第 7 个元素时,不会有分裂,但我们将插入具有最大元素的叶节点,以在进一步插入时产生更多分裂,如图(e)所示。
在插入第 8 个元素时,将有 1 个分割,如图 (f) 所示。
在插入第 9 个元素时,不会有分裂,但我们将插入具有最大元素的叶节点,以在进一步插入时产生更多分裂,如图(g)所示。
在插入第 10 个元素时,将有 2 个分割,如图 (h) 所示。
拆分总数 = 5。