在略微不平衡的二叉树中二进制搜索的时间复杂度

时间:2017-04-01 12:26:42

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

如果二进制树是平衡的,则二进制搜索的最佳运行时间是O(log(n))。最糟糕的情况是,如果二叉树是如此不平衡,它基本上代表一个链表。在这种情况下,二进制搜索的运行时间将是O(n)。

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

Lets take this binary tree for example.

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

2 个答案:

答案 0 :(得分:0)

n 值的排序数组中,二进制搜索值的运行时间为 O(log n),在最差的情况下
最佳情况中,您要搜索的元素位于确切的中间< / strong>,它可以在固定时间内完成。
平均情况中,运行时间为O(log n)

答案 1 :(得分:0)

通常,当我们说“在平衡二叉搜索树中查找元素的成本是O(log n)”时,“我们的意思是”在最坏的情况下,我们必须在平衡二叉搜索树上执行搜索的过程中进行O(log n)工作。“由于我们在这里讨论的是大O符号,因此前面的语句是针对平衡树而不是特定的具体树。

如果您考虑到特定的BST,则可以计算出查找任何元素所需的最大比较次数。只需找到树中最深的节点,然后想象搜索一个大于该值但小于树中下一个值的值。这将使你尽可能深入地走到树下,使得最大的比较次数成为可能(具体来说,h + 1,其中h是树的高度)。

为了能够谈论在树中执行查找的大O成本,您需要讨论不同数量节点的树的系列。你可以想象“有点平衡”的树,其深度为Θ(√n),例如,查找需要时间O(√n)。然而,在实践中遇到这样的树是不常见的,因为通常你要么(1)有一个完全不平衡的树,或者(2)使用某种平衡的树来防止高度变得那么高。