-1

What is the time complexity of the following implemented algorithm?

I should notice that length of b is enough to cover the element of a as an index.

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);
         }
    }
}
4

3 に答える 3

2

宿題のように見えるので、最良の答えは最終的な答えであるだけでなく、あなたが学ぶことができるものでもあります.

n = a.Lengh、m = b.Length とする

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

b の要素に対して 1 つのパスを作成するため、m ステップに貢献します。

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

n ステップに寄与するように、a の要素を 1 回パスします。

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

b の要素に対して 1 つのパスを作成するため、m ステップに貢献します。

これまでのところ、2m + 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 のすべての要素に対して、mn ステップに寄与するすべての a の要素にパスがあります。

すべてのステップの合計は 2m+n+mn であり、漸近表記では O(mn) です。

于 2010-05-26T06:14:56.723 に答える
1

O(len(b)*len(a))

于 2010-05-26T05:59:45.387 に答える
0

O(b*a)みたい

于 2010-05-26T05:58:05.843 に答える