【问题标题】:Time complexity of binary search in a slightly unbalanced binary tree不平衡二叉树中二叉搜索的时间复杂度
【发布时间】:2017-04-01 12:26:42
【问题描述】:

如果二叉树是平衡的,二叉搜索的最佳运行时间是 O(log(n))。最坏的情况是,如果二叉树非常不平衡,它基本上代表一个链表。在这种情况下,二分查找的运行时间为 O(n)。

但是,如果树只是稍微不平衡怎么办,就像这棵树的情况:

如果我没记错的话,最好的情况仍然是 O(log n)。但最坏的情况是什么?

【问题讨论】:

  • 对于那棵树,所有情况都是 O(1)。您需要指定一个以 n 为单位的树深度公式,或者提供一种算法,其复杂度可以分析以生成以 n 为单位的复杂度公式。

标签: data-structures time-complexity big-o binary-search-tree


【解决方案1】:

n 个值的排序数组中,二分查找的运行时间为 O(log n)最坏情况
最好情况,您要搜索的元素位于正中间 ,并且它可以在恒定时间内完成。
平均情况中,运行时间也是O(log n)

【讨论】:

    【解决方案2】:

    通常,当我们说“在平衡二叉搜索树中查找元素的成本是 O(log n)”时,我们的意思是“在最坏的情况下,我们在平衡二叉搜索树上执行搜索的过程中必须做 O(log n) 的工作。”由于我们在这里讨论的是大 O 表示法,所以前面的陈述是关于一般的平衡树,而不是具体的具体树。

    如果您有特定的 BST,您可以计算出查找任何元素所需的最大比较次数。只需找到树中最深的节点,然后想象搜索一个大于该值但小于树中下一个值的值。这将导致您尽可能深入地沿着树向下走,从而尽可能多地进行比较(具体而言,h + 1 次,其中 h 是树的高度)。

    为了能够谈论在树中执行查找的大 O 成本,您需要谈论具有不同数量节点的树的。例如,您可以想象深度为 Θ(√n) 的“有点平衡”的树,其中查找将花费时间 O(√n)。但是,在实践中很少会遇到这样的树,因为通常您要么 (1) 拥有完全不平衡的树,要么 (2) 使用某种平衡的树来防止高度变得那么高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      相关资源
      最近更新 更多