计算递归函数的大O.

时间:2014-12-02 16:43:10

标签: algorithm recursion

我有一个检查数组是否是堆的方法。在每次递归调用时,我在左子树和右子树上创建2个新的递归调用来遍历节点并检查它们的值是否正确。

我想计算一下BigO。我认为在最坏的情况下它是O(n),因为如果它是一个堆,那么它永远不会提前停止并且需要访问每个节点。我认为最好的情况是O(3),当它检查第一个左子树和右子树并且都返回false(不是堆)时会发生。

我的问题是:这种逻辑有意义吗?我认为确实如此,但每当我看到递归函数的时间复杂性时,它们似乎总是处于某种形式的对数时间。这几乎就像没有人明确说明的递归函数有一些神秘的质量。为什么递归函数经常在对数时间处理事物?我的上述逻辑是否有效?

2 个答案:

答案 0 :(得分:1)

是的,这是有道理的。 Master Theorem的三个案例中只有一个(虽然可以说是最有趣的)具有对数。

答案 1 :(得分:1)

是的,这是有道理的。您认为大多数算法采用对数时间的原因是因为它会重复某些因素并将范围除以某个因素。