时间复杂度与空间复杂度

几个常见的时间复杂度进行示例说明:

(1)、O(1) 

 Temp=i; i=j; j=temp;                     
   以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。注意:如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。 

(2)、O(n2)

交换i和j的内容

1.sum=0;(一次)   

2.for(i=1;i<=n;i++) (n+1次)   

3.for(j=1;j<=n;j++)(n(n+1)次)   

4.sum++;(n(n+1)+1次) 

因为(2n2+n+1)=n2(即:去低阶项,去掉常数项,去掉高阶项的常参得到),所以T(n)= =O(n2);

一般情况下,对步进循环语句只需考虑循环体中语句的执行次数,忽略该语句中步长加1、终值判别、控制转移等成分,当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。

(3)、O(n)  

1.a=0;   

2.b=1;               ①   

3.for (i=1;i<=n;i++) ②   

4.{s=a+b;            ③   

6.b=a;               ④     

7.a=s; }             ⑤ 

语句1的频度为2,语句2的频度为n,语句3的频度为n-1,语句4的频度为n-1,语句5的频度为n-1, 即T(n)=2+n+3(n-1)=4n-1=O(n). 

(4)、O(log2n) 

1. i=1;   ①   

2. while (i<=n)   

3. i=i*2; ② 

语句1的频度是1,设语句2的频度是f(n),则:2^f(n)<=n;f(n)<=log2n,取最大值f(n)=log2n,即T(n)=O(log2n) 

(5)、O(n3)  

1. for(i=0;i<n;i++){     

2. for(j=0;j<i;j++){   

3.for(k=0;k<j;k++)   

4.x=x+2; }}

当i=m,j=k的时候,内层循环的次数为k当i=m时, j可以取 0,1,...,m-1 ,所以这里最内循环共进行了0+1+...+m-1=(m-1)m/2次所以,i从0取到n,则循环共进行了:0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/6所以时间复杂度为O(n3).

原文地址:https://www.cnblogs.com/2390624885a/p/6538963.html