题目要求:

设 n 为正整数, 给出下列 3 个算法关于问题规模 n 的时间复杂度。

  • (1) 算法 1
    void fun1(int n)
    { i=1,k=100;
    while (i<=n)
    { k=k+1;
    i+=2;
    }
    }
  • (2) 算法 2
    void fun2(int b[], int n)
    { int i, j, k, x;
    for (i=0;i<n-1;i++)
    { k=i;
    for (j=i+1;j<n;j++)
    if (b[k]>b[j]) k=j;
    x=b[i];b[i]=b[k];b[k]=x;
    }
    }
  • (3) 算法 3
    void fun3(int n)
    { int i=0,s=0;
    while (s<=n)
    { i++;
    s=s+i;
    }
    }

答案:

(1)O(n)

(2)O(n²)

(3)O(根号n)

解题思路:

1.由题意知当i小于等于n的时候进行循环,运算的时间复杂度得出应该为n,因此O(n)

2.由题意知可以看出这是两个嵌套的循环,且每一个嵌套的时间复杂度均为n,基本步骤的执行数量为(n-1)*(n-1)/2,则总体的时间复杂度应该为O(n2)

3.由题意知可以先设n为一个具体的值,进而推导O(n2)的时间复杂度为n,所以最终复杂度就应该为根号下n。

相关文章:

  • 2021-09-13
  • 2021-08-17
  • 2021-05-17
  • 2021-11-04
  • 2021-10-24
  • 2021-05-12
猜你喜欢
  • 2021-12-26
  • 2022-02-08
  • 2022-01-20
  • 2021-11-25
  • 2021-07-11
  • 2021-11-29
  • 2021-11-25
相关资源
相似解决方案