【问题标题】:Why B Tree complexity is O(log n), it is not a binary tree为什么 B 树的复杂度是 O(log n),它不是二叉树
【发布时间】:2019-12-21 04:58:20
【问题描述】:

根据WikiGFG,B 树的搜索/插入/删除时间复杂度为 O(log n)。 A B 树可以有 > 2 个子树,即它不是二叉树。所以我不明白为什么它是 log n - 它不应该比 log n 快吗?例如搜索应该是最坏情况 O(h),其中 h 是树的高度。

【问题讨论】:

  • 为什么一个三个有三个孩子的不是log(n)
  • 根据我从答案中了解到的情况,它将是不同基数的 log n(在您的示例中为基数 3)
  • 正确,但loga(b) 只是log(b)/log(a),因此这是一个常数因子。

标签: time-complexity b-tree


【解决方案1】:

是的,它不是二叉树。但是如果我们在一个节点内执行二元搜索算法(对于一个节点内的 kyes),时间复杂度可以被认为是 O(logn)。

让我们考虑一下,

B 树的度数(每个节点的最大子节点数)≤ m。 节点中的节点总数:n

如果是上述情况,

树的高度是

O(log<sub>m</sub>n)   ----------(1)
由于每个节点可以更改子节点的数量,因此必须按节点顺序进行对数搜索
(lgm)   ----------(2)

所以在二叉树中搜索的总复杂度是

O(log<sub>m</sub>n) . O(lgm)   ----------(3)

按对数运算,

{log<sub>b</sub>a = log<sub>c</sub>a / log<sub>c</sub>b}

将上述操作应用于(3)

O(logmn) . O(lgm) = O(lgn/lgm) . O(lgm)
                  = O(lgn) 

所以搜索操作的B树时间复杂度是O(lgn)

【讨论】:

    【解决方案2】:

    B-Tree 是二叉树的一种推广,其中每个节点可以拥有超过 2 个子节点。但这并不确定。例如,如果每个节点的子节点数定义为 x,那么复杂度将为。但是,当最小子节点数为 2(如 B-Tree)时,树的最大高度将为 ,并且如前一个答案中所述,Big-O 考虑最坏的情况,即具有最大高度(对数基数 2)。因此,B-Tree 的复杂度为。

    【讨论】:

    • 知道了!谢谢。
    【解决方案3】:

    Big-O 是衡量最坏情况复杂度的指标;由于 B-tree 节点不需要有超过 2 个子节点,因此最坏的情况是 no 节点有超过 2 个子节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-23
      • 2021-02-15
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      相关资源
      最近更新 更多