【问题标题】:Time Efficiency of Binary Search Tree二叉搜索树的时间效率
【发布时间】:2017-07-18 03:26:05
【问题描述】:

对于插入二叉搜索树的时间效率,

我知道插入的最佳/平均情况是 O(log n),而最坏情况是 O(N)。

我想知道的是,除了实施 AVL(平衡 BST)之外,是否有任何方法可以确保我们在插入时始终拥有最佳/平均情况?

谢谢!

【问题讨论】:

    标签: insert time-complexity big-o binary-search-tree avl-tree


    【解决方案1】:

    如果不平衡二叉搜索树,则无法保证 log n 复杂度。在搜索/插入/删除时,您必须在树中导航,以便将自己定位在正确的位置并执行操作。关键问题是——到达正确位置需要多少步?如果 BST 是平衡的,您可以预期平均 2^(i-1) 节点位于 i 级别。这进一步意味着,如果树有k 级别(k 称为树的高度),则树中的预期节点数为1 + 2 + 4 + .. + 2^(k-1) = 2^k - 1 = n,这给出k = log n,这就是从根导航到叶所需的平均步数。

    话虽如此,平衡 BST 有多种实现方式。您提到了 AVL,另一个非常流行的是 red-black tree,它用于例如在 C++ 中实现 std::map 或在 Java 中实现 TreeMap

    当您不平衡 BST 并且您的树退化为链表时,可能会发生最坏的情况,O(n)。很明显,为了定位到列表的末尾(这是最坏的情况),您必须遍历整个列表,这需要n 步骤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多