算法的复杂性

时间:2010-05-26 05:45:01

标签: algorithm time-complexity

以下实施算法的时间复杂度是多少?

我应该注意b的长度足以覆盖a的元素作为索引。

void smax(int[] a, int n){    
    int[] b = new int[n];
    for (int i=0;i<b.length;i++){
        b[i]=0;
    }
    int m=0;
    while (m<b.length) {
        int k=a[0];
        for (int i=0;i<a.length;i++) {
            if (a[i]> k && b[a[i]]!=1) {
               b[a[i]]=1;
            }
         }
         m++;
    }
    for (int i=0;i<a.length;i++){
         if (b[a[i]]!=1){
            b[a[i]]=1;
         }
    }
    for (int j=0;j<b.length;j++){
         if (b[j]==1){
            System.out.println(j);
         }
    }
}

3 个答案:

答案 0 :(得分:2)

看起来像家庭作业所以最好的答案不仅是最终答案,而且还是你可以学习的答案。

设n = a.Lengh,m = b.Length

for (int i=0;i<b.length;i++){
     b[i]=0;
  }

对b的元素进行一次传递,因此它将贡献m步。

for (int i=0;i<a.length;i++){
     if (b[a[i]]!=1){
        b[a[i]]=1;
     }
  }

对一个元素进行一次传递,这样就可以完成n步。

for (int j=0;j<b.length;j++){
     if (b[j]==1){
        System.out.println(j);
     }
  }

对b的元素进行一次传递,因此它将贡献m步。

到目前为止,我们有2米+ n

int m=0;
  while (m<b.length) {
     int k=a[0];
     for (int i=0;i<a.length;i++) {
        if (a[i]> k && b[a[i]]!=1) {
           b[a[i]]=1;
        }
     }
     m++;
  }

对于b的每个元素,都会传递所有a元素,这些元素有助于mn步。

所有步长之和为2m + n + mn,渐近符号为O(mn)。

答案 1 :(得分:1)

O(LEN(B)* LEN(a))的

答案 2 :(得分:0)

看起来像O(b * a)