【问题标题】:How Balanced are balanced B-Trees平衡 B 树的平衡程度如何
【发布时间】:2011-04-26 12:12:55
【问题描述】:

假设我有一个 B-Tree,其节点采用 3-4 配置(3 个元素和 4 个指针)。假设我按照规则合法地建立了我的树,我是否有可能达到一层中有两个节点,一个节点有4个退出指针,另一个只有两个退出指针的情况?

一般来说,对于正确使用的 B-Tree 的平衡性,我有什么保证

【问题讨论】:

    标签: b-tree


    【解决方案1】:

    平衡背后的想法(通常是平衡树数据结构)是任何两个子树之间的深度差异为零或一(取决于树)。换句话说,用于查找叶节点的比较次数总是相似的。

    所以是的,您最终可能会遇到您所描述的情况,仅仅是因为深度相同。每个节点中的元素数量与平衡无关(但请参见下文)。

    这是完全合法的,即使左侧节点中的项目多于右侧节点(未显示空指针):

                     +---+---+---+
                     | 8 |   |   |
                     +---+---+---+
            ________/    |
           /             |
          |              |
    +---+---+---+  +---+---+---+
    | 1 | 2 | 3 |  | 9 |   |   |
    +---+---+---+  +---+---+---+
    

    但是,拥有 3-4 个 BTree 是非常不寻常的(有些人实际上会说 根本不是 BTree,而是其他一些数据结构)。

    使用 BTrees,通常每个节点中最多有偶数个键(例如,一棵 4-5 棵树),以便拆分和组合更容易。对于 4-5 树,当节点填满时决定提升哪个键很容易 - 它是五个中的中间一个。对于 3-4 树来说,这不是一个明确的问题,因为它可能是两个之一(四个元素没有明确的中间)。

    它还允许您遵循节点应包含在n2n 元素之间的规则。此外(对于“正确的”BTrees),叶子节点都在相同深度,而不仅仅是在彼此之间。

    如果您将以下值添加到空 BTree,您最终可能会遇到您描述的情况:

    Add           Tree Structure
    ---          ----------------
     1                  1
    
     2                 1,2
    
     5                1,2,5
    
     6               1,2,5,6
    
     7                  5
                       / \
                    1,2   6,7
    
     8                  5
                       / \
                    1,2   6,7,8
    
     9                  5
                       / \
                    1,2   6,7,8,9
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      相关资源
      最近更新 更多