一、时间复杂度

发布于:2023-01-04 ⋅ 阅读:(301) ⋅ 点赞:(0)

T(n)=n+1 忽略常数项 T(n)~n

T(n)=n+n^2 忽略低阶项 T(n)~n^2

T(n)=3n 忽略最高阶的系数 T(n)~n

常用的时间复杂度从小到大依次为:

O(1)  <  O(logn)  <  (n)  <  O(nlogn)  <  O(n^2)  <  O(n^3)   <  O(2^n)  <  O(n!)  <O(n^n)


(一)常数阶——O(1)

   以下算法的时间复杂度为( o(1) )。         

 int n=100;

     n=n+1;

      system.out.println(n);

    解析:  该语句执行一次,所以时间复杂度为o(1) 。


 (二)线性阶——O(n)

    以下算法的时间复杂度为(  o(n) ) 。

public static void main(string[] args){

    int n=100;

     for (int i=0;i<n;i++){

        system.out.println("text");
        }
    }

解析: n=100,i=0,i<n,text,i++

            n=100,i=0,0<100,text,i=1

            n=100,i=1,1<100,text,i=2

            n=100,i=2,2<100,text,i=3

            .............

            n=100,i=99,99<100,text,i=100

该语句段一共执行100次,执行次数由n决定,所以该语句的时间复杂度为o(n)。


(三)平方阶——O(n^m)

   1、以下算法的时间复杂度为(  o(n^2) ) 。

​int x=1;
int i=1;
  for(x=1; i<=n; x++)
{
   for(i=1; i<=n; i++)
    {
       j = i;
       j++;
    }
}

​

解析:相当于把o(n)的代码再循环嵌套了一次,所以时间复杂度就是o(n*n)=o(n^2)。

   2、以下算法的时间复杂度为( o(mn) ) 。

int i=0;
int j=0;
for(i=0;i<n;i++)
    for(j=0;j<m;j++)
        a[i] [j]=0;

解析:a[ i ][ j ]=0是基本语句,该代码内循环执行了m次,外循环执行了n次,所以一共执行了m*n次,时间复杂度就是o(mn)。


(四)对数阶——O(log n)

    以下算法的时间复杂度为( O(log2n) ) 。

int i=1;
while(i<=n)
    i=i*2;

解析:n=5,i=1,i<5,i=1*2=2

                  i=2,i<5,i=2*2=4

................

每次i=i*2之后,i离n的距离就越来越近,当循环m次后,i>n时,循环就结束了

所以 2m=n——m=log2n,所以时间复杂度就是o(log2n)。



网站公告

今日签到

点亮在社区的每一天
去签到