【问题标题】:Can the max and min height of b+ tree be the same value?b+树的最大和最小高度可以是相同的值吗?
【发布时间】:2021-01-19 17:46:19
【问题描述】:

我有这些信息:

  1. 1000 万条记录。
  2. 每条记录为 256 字节。
  3. 每条记录都有一个 32 字节的索引字段。
  4. 我们系统的磁盘块大小为 8KB。
  5. 我们的系统是 32 位的,所以指针是 4 字节。 (将其用于链接!)。

我想找到这棵 B+ 树的最大和最小高度。当我确实有相同的最大值和最小值时,这可能吗?如果不是,你能指出错误吗?

我采取的步骤

DATA NODE相关计算

假设 L 为数据节点(叶节点)中的数据计数

  • 节点大小 = 数据计数 * 记录大小
  • 8KB = L * 256 字节
  • 8192 字节 = L * 256 字节
  • L = 8192 / 256
  • L = 32

记住:数据节点最多可以存储 32 条记录!因此,每个数据节点的最大数据数为 32。这意味着,一个数据节点至少可以存储 32/2=16 个数据至少/最少!

所以

  • 最小数据数为 16
  • 最大数据数为 32

INDEX NODE 相关计算

  • 节点大小 = (M – 1) * 索引/键 + M * 链接(指针)
  • 8KB = (M – 1) * 32 字节 + M * 4 字节
  • 8192 字节 = (M – 1) * 32 + 4* M
  • 8192 = 36M – 32
  • 36M = 8224
  • M = 228

我们的数据节点最多可以存储 32 条记录,最少可以存储 16 条记录。我们的索引节点最多可以存储 227 个索引,最少 113 个索引。

找到最小值:

  • 1000 万条记录 = 32 条记录 * 叶/数据节点数
  • 叶节点数 = 1000 万 / 32
  • 叶节点数 = 312500

所以,要存储 1000 万条记录,我们需要 312500 个 FULL 数据节点!

对于 312500 个数据节点,我们需要从索引节点获得 312500 个链接!


  • 312500 = 链接数 * 索引节点
  • 312500 = 228 * 索引节点
  • 索引节点 = 1370
  • 由于 1370 大于 228。这意味着我们需要有较高的索引节点!

  • 1370 = 228 * 上索引节点
  • 上索引节点 = 6,小于 228。这意味着我们需要在这 6 个索引节点之上的根节点!

所以最小高度是 3:

找到最大值:

  • 1000 万条记录 = 16 条记录 * 叶/数据节点数
  • 叶节点数 = 1000 万 / 16
  • 叶节点数 = 625000

所以,要存储 1000 万条记录,我们需要 625000 个 FULL 数据节点!

对于 625000 个数据节点,我们需要来自索引节点的 625000 个链接!


  • 625000 = 链接数 * 索引节点
  • 625000 = 228 * 索引节点
  • 索引节点 = 2741

由于 2741 大于 228。这意味着我们需要有较高的索引节点!


  • 2741 = 228 * 上索引节点

上索引节点 = 12,小于 228。这意味着我们需要在这 12 个索引节点之上的根节点!

问题:所以最大高度也是3?

【问题讨论】:

    标签: algorithm data-structures b-tree


    【解决方案1】:

    是的,这是完全可能的。根将获得的子节点数量明显不同,在第一种情况下很小,在第二种情况下是倍数。

    我应该注意到您有一些错误。主要错误是在最后一部分(“找到最大值”)中,您没有将索引节点的使用减少到其容量的一半。您继续使用 228,而您应该使用 114。

    其次,在第一种情况下,您需要将分区向上舍入,因为您需要一个额外的节点来覆盖分区的其余部分(从相邻节点重新分配一些键)。在第二种情况下,向下舍入是正确的,这意味着您需要将除法的其余部分添加到节点(因为它有空间)。

    这些更正不会影响两种情况下都需要 3 个级别的最终结论。概述:

    Fill style Records / leaf Keys / index Data nodes Level 3 Level 2 Level 1
    compact 32 228 312500 1371 7 1
    sparse 16 114 625000 5482 49 1

    【讨论】:

    • 感谢您的帮助,因为我知道要找到 B+Tree 的最小高度我们考虑完整 (MAX) 节点,为了找到最大高度,我们考虑HALF(MIN)个完整节点。
    猜你喜欢
    • 2018-02-28
    • 2011-02-18
    • 2022-11-15
    • 1970-01-01
    • 2011-02-04
    • 2016-08-03
    • 1970-01-01
    • 2021-05-17
    • 2017-09-02
    相关资源
    最近更新 更多