递归树函数的复杂性

时间:2015-12-10 22:26:51

标签: algorithm time-complexity

我不确定这些函数的O()复杂性。我的答案在盒子里。有人告诉我他们都是O(n),但我不明白为什么会这样。感谢。

enter image description here

2 个答案:

答案 0 :(得分:3)

所有四个都是O(n)(忽略两个最佳案例问题应该使用Ω(n)),因为你必须检查每个节点。

考虑height:您必须递归检查每个子树,只有在到达树的底部时才会终止。这意味着你最终会到达每个叶子节点。你不能提前终止。

同样适用于balanced;如果没有首先验证每个子树是否平衡,则无法验证树是否平衡,在此实现中,这意味着为每个子树调用height

现在考试的措辞。 Big O表示法用于最坏情况,因为最坏的情况(根据定义)比所有其他情况“更大”。最坏情况的上限必然是所有情况的上限。同样,根据定义,最好的情况是“小于”所有其他情况。最佳案例的上限几乎是无用的,因为你无法对剩下的案例说些什​​么。

在谈论最佳案例时,使用Ω(大欧米茄)表示法,它提供较低界限。说最好的情况是Ω(n)告诉你,无论最好的基数(因此每个案例)有多好,它都不小于n。

对于height和`balance,你实际上可以证明最好的情况是Ω(n)最坏的情况是O(n)。在这种情况下,你可以将它们组合起来并说每个都是Θ(n);上限和下限匹配。

答案 1 :(得分:0)

height()
最好的情况:左右树都是空的。因此,O(1)进行单一最大比较,但从技术上讲,n = 1,您可以说O(n)

最坏情况:当两者都不为空时,必须完全遍历左右树。 O(n)

就我所知,balanced()也是如此。