【问题标题】:Calculating Big O of a recursive function计算递归函数的大 O
【发布时间】:2014-12-02 16:43:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: algorithm recursion


    【解决方案1】:

    是的,这是有道理的。您看到大多数算法需要对数时间的原因是因为它会重复某些内容并保持将范围划分为某个因素。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-19
        • 1970-01-01
        • 2015-07-28
        • 2022-11-25
        • 1970-01-01
        相关资源
        最近更新 更多