什么叫算法的时间复杂度?怎样表示算法的时间复杂度?
算法的时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析 T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作T(n)= O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和 f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
学过高等数学的小伙伴可以试着用极限的思想来理解。
表示算法的时间复杂度
用大写O()来体现算法时间复杂度(大O记法)。
推导大O阶的具体步骤
(1)用常数1取代运行时间中的所有加法常数。
(2)在修改后的运行次数函数中,只保留最高阶项。
(3)如果最高阶项存在且其系数不是1,则去除与这个项相乘的系数。得到的结果就是大O阶。
经典例题
设n为已在算法前面定义的整数类型,并已知n为正整数,表示问题的规模,分析以下各算法的时间复杂度T(n)。(答案在最后)
1
int sum1( int n )
{ int p=1, sum=0, m ;
for (m=1; m<=n; m++)
{ p*=m ; sum+=p ; }
return (sum) ;
}
2
Void fun1(int n)
{ int i=0,k=0 ;
while(i<n-1)
{ k=k+10*i ;
i++ ;
}
}
3
int fun2(int n)
{ int i=1,j=1 ;
while(i*i<=n)
{ i++ ; j++ }
return j ;
}
4
int sun2(int n)
{ int x=n,y=0 ;
while(x>=(y+1)* (y+1))
y++
}
5
//设表示n阶矩阵数组a和b已经赋值,求矩阵相乘的程序段的时间复杂度。
for (i=0 ;i<n ;i++)
for (j=0 ;j<n ;j++)
{ c[i][j] =0 ;
for (k=0 ;k<n ;k++)
c[i][j]= c[i][j]+a[i][k]*b[k][j] ;
}
6
int sun2(int n)
{ int sum=0, m, t ;
for (m=1; m<=n; m++)
{ p=1 ;
for (t=1; t<=m; t++)
p*=t ; sum+=p ;
}
return (sum) ;
}
答:1、T(n)=O(n)
2、T(n)=O(n)
3、T(n)=O(n^(1/2) )
4、T(n)=O(n^(1/2) )
5、T(n)=O(n^3 )
6、T(n)=O(n^3 )