查找big-O的复杂性。三种算法

时间:2019-02-17 14:03:03

标签: java performance big-o

我正在尝试查找以下算法的时间复杂度。

据我所见,alg1中的前两个循环是 n ^ 2 ,但是我不确定alg2中的循环将在什么时间运行。

public class algo {




public static int alg1(int[] A, int n) {
    int l = 0;

    for (int i = 0; i <= n-1; i++) {
        for (int j = i+1; j <= n-1 ; j++) {
           if(alg2(A,i,j) && j-i > l) {
               l = j-i+1;
           }
        }
    }

    return l;

}

private static boolean alg2(int[] A,int i, int j) {
    if(i==j) {
        return true;
    }

    for (int k = i; k <= j-1; k++) {
        if(A[k] != A[k+1]) {
            return false;
        }
    }

    return true;
}
}

2 个答案:

答案 0 :(得分:2)

您是正确的,第一个Alg1的时间复杂度为O(n ^ 2)。第二个函数Alg2具有O(n)的时间复杂度,因为算法的性能将与其输入大小成线性比例增长。您只有一个for循环,并且没有在该代码的任何地方应用D&C技术。

答案 1 :(得分:2)

alg2是O(n)

alg1,因为它在内部for循环中具有alg2,因此它应为O(n ^ 2 * n)= O(n ^ 3)。如果您想证明这一点:

enter image description here