【问题标题】:Big-O of recursion递归的大 O
【发布时间】:2017-02-15 20:18:12
【问题描述】:

我看过很多关于Big-O的问题,但我不太明白这个。

我在练习一些面试问题时遇到了一个问题,我必须找出一个毕达哥拉斯三元组是否存在于整数数组中。 我发现有一个简单的 O(n^3) 方法来解决它,但我想找到一种更快的方法。

我的问题是,下面的代码是 O(n^2) 还是 O(n^3)? 我很困惑,因为即使我只有 2 个循环,在最坏的情况下我也需要经历 n 次 n^2,这将是 O(n^3)。

public boolean findTriple(int[] array) {
return findT(0, array);
}

public boolean findT(int start, array) {
if(start == array.length-1) {
    return false;
}
int first = array[start];
for(int i = 0; i < array.length; i++) {
    for(int j = i+1; j < array.length; j++) {
        if(first*first == array[i]*array[i] + array[j]*array[j] ||
           array[i]*array[i] == array[j]*array[j] + first*first ||
           array[j]*array[j] == first*first + array[i]*array[i]) {
            return true;
        }
    }
}
return findT(start+1, array);
}

【问题讨论】:

    标签: c recursion time-complexity big-o


    【解决方案1】:

    每次调用该函数时,您都会执行O(n^2) 操作。你调用你的函数 n 次。 所以总复杂度是:O(n^3)

    【讨论】:

    • 谢谢。需要确认。
    • @Moon 我的荣幸。
    • 您可以分析显示。让f(n) 是对findT 的整个调用中的操作数,并观察f(n) = k*n^2 + f(n - 1) 对于某个常量k;那么为什么f(n) 是O(n^3) 就变得更明显了
    猜你喜欢
    • 2010-09-17
    • 2012-07-29
    • 2011-01-19
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多