Algorithm 递归树函数的大O复杂度

Algorithm 递归树函数的大O复杂度,algorithm,time-complexity,Algorithm,Time Complexity,我不确定这些函数的O()复杂性。我的答案在盒子里。有人告诉我他们都是O(n),但我不明白这是为什么。谢谢 高度() 最佳情况:左树和右树都为空。因此,对于单个最大值比较,O(1),尽管从技术上讲,n=1,所以您可以说O(n) 最坏情况:当左树和右树都不为空时,必须完全遍历左树和右树O(n) 就我所知,balanced()也是如此 所有四个都是O(n)(忽略两个最佳情况问题应该使用Ω(n)),因为您必须检查每个节点 考虑height:您必须递归地检查每个子树,仅在到达树的底部时终止。这意味着您最

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

高度()

最佳情况:左树和右树都为空。因此,对于单个最大值比较,
O(1)
,尽管从技术上讲,
n=1
,所以您可以说
O(n)

最坏情况:当左树和右树都不为空时,必须完全遍历左树和右树<代码>O(n)


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

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

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

平衡的也是如此;如果不先验证每个子树是否平衡,就无法验证树是否平衡,在这个实现中,这意味着为每个子树调用
height


现在来看看考试的措辞。大O符号用于最坏的情况,因为最坏的情况(根据定义)比所有其他情况都“大”。最坏情况的上限必然是所有情况的上限。类似地,根据定义,最佳情况比所有其他情况都“小”。最好案例的上限基本上是无用的,因为你不能对剩下的案例说任何话

在讨论最佳情况时,使用Ω(大ω)表示法,它提供了一个下限。说最好的情况是Ω(n)告诉你,无论最好的基础(以及每个情况)有多好,它都不小于n


对于高度和平衡,实际上可以显示最佳情况是Ω(n),最坏情况是O(n)。在这种情况下,你可以把它们组合起来,说每一个都是Θ(n);上界和下界匹配。

大的Oh复杂性和“最佳情况”毫无意义。至少,当文本足够时不要拍照。输入问题可能需要一些时间。最好的情况仍然是O(n),因为在这种情况下n=1。您将在
balanced()
上为递归路径下的每个节点调用
height()
。。。这将使它大于O(n),因为它会向后遍历每个节点的树,对吧?可能;我还没有仔细研究实际的实现(在上下界的巨大切线上忙得不可开交)。一个好的实现应该是O(n):)从它的实现方式来看,如果左子树是不平衡的,那么它甚至不会检查右子树,并且会返回false。所以如果左边的子树很小(比如说2个节点,不平衡),那么它不是O(1)吗?我有点困惑。一个好的实现会将高度存储为节点类的一部分,并随着节点添加到树中而适当增加。那么这两种方法都可以在O(1)中完成。