在树结构的Big-O表示法中:为什么有些源引用O(logN)而有些源引用O(h)?

时间:2012-02-03 20:09:16

标签: algorithm data-structures tree big-o binary-search-tree

在研究遍历二叉搜索树的任何算法的复杂性时,我看到两种表达同一事物的不同方式:

版本#1:最坏情况下的遍历算法比较树的每个高度一次;因此,复杂性为O(h)

版本#2:最坏情况下的遍历算法比较树的每个高度一次;因此,复杂性为O(logN)

在我看来,同样的逻辑在起作用,但不同的作者使用logNh。有人可以向我解释为什么会这样吗?

5 个答案:

答案 0 :(得分:15)

搜索最坏情况时间的正确值是树是O(h),其中h是树的高度。如果您使用的是平衡搜索树(树的高度为O(log n)),则查找时间为最坏情况O(log n)。也就是说,并非所有树木都是平衡的。例如,这是一棵高度为n - 1的树:

1
 \
  2
   \
    3
     \
     ...
       \
        n

这里,h = O(n),因此查找是O(n)。正确地说查找时间也是O(h),但在这种情况下h≠O(log n),并且声称查找时间为O(log n)是错误的。

简而言之,O(h)是正确的界限。当高度最多为O(log n)时,O(log n)是平衡搜索树中的正确边界,但并非所有树都有查找时间O(log n),因为它们可能是不平衡的。

希望这有帮助!

答案 1 :(得分:8)

如果你的二叉树是平衡的,所以每个节点都有两个子节点,那么树中的节点数就是 N = 2 h - 1,因此高度是元素数量的对数(对于任何完整的 n - 树,类似)。

然而,任意的,不受约束的树可能看起来完全不同;例如,它可以在每个级别只有一个节点,因此在这种情况下 N = h 。因此,高度是更一般的度量,因为它与实际比较有关,但在额外的平衡假设下,您可以将高度表示为元素数量的对数。

答案 2 :(得分:2)

O(h)将引用已排序但未平衡的二叉树

O(logn)将引用已排序和平衡的树

答案 3 :(得分:1)

这有两种说法相同的方式,因为你的平均高度为“h”的平衡二叉树将有大约2 ^ h个节点。

根据上下文,高度或#nodes可能更相关,因此您将看到引用的内容。

答案 4 :(得分:0)

因为(h)八个平衡树的变化因为(N)元素的对数