示例1
int f(int n) {
if(n <= 1) {
return 1;
}
return f(n - 1) + f(n - 1);
}
我可以理解上述代码的运行时间为O(2^N),因为如果我传入5,它会调用4两次,然后每个4又各自调用3两次,一直到达1,类似于O(branches^depth)。
例2 平衡二叉树。
int sum(Node node) {
if(node == null) {
return 0;
}
return sum(node.left) + node.value + sum(node.right);
}
我读到上面的代码的运行时间是O(2^log N),因为它是平衡的,但我仍然认为它是O(2^N)。有人能解释一下吗?
- 当元素数量每次减半时,运行时间为log N。但这里二叉树是如何工作的?
- 它是不是只因为它是平衡的才是2^log N?
- 如果它不平衡怎么办?
谢谢!
sum
函数不是O(2^log n)
,而是O(n)
。 - Mulan