繁体   English   中英

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

[英]Finding big-O complexity. of three algorithms

我试图找到以下算法的时间复杂度。

从我可以看到,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;
}
}

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

alg2是O(n)

alg1因为它alg2内内部for循环所以它应该是为O(n ^ 2 * N)= O(N ^ 3)。 如果您想证明这一点:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM