【发布时间】:2014-12-02 16:43:10
【问题描述】:
我有一个方法可以检查数组是否是堆。在每次递归调用时,我都会在左子树和右子树上创建 2 个新的递归调用,以遍历节点并检查它们的值是否正确。
我想计算这个的 BigO。我认为在最坏的情况下它是 O(n) 因为如果它是一个堆,那么它永远不会提前停止并且需要访问每个节点。我认为最好的情况是 O(3),当它检查第一个左子树和右子树并且都返回 false(不是堆)时会发生这种情况。
我的问题是:这个逻辑有意义吗?我认为确实如此,但是每当我看到递归函数的时间复杂度时,它们似乎总是某种形式的对数时间。就好像没有人明确说明的递归函数有一些神秘的品质。为什么递归函数经常以对数时间处理事物?我的上述逻辑有效吗?
【问题讨论】: