算法的时间复杂度:用O()表示,执行次数=时间,随着输入规模n增大,T(n)增长最慢的算法为最优算法。
如何计算时间复杂度:
用常数1取代运行时间中的所有加法常数
在修改后的运行次数函数中,只保留最高阶项
如果最高阶项存在且不是1,则去除与这个项相乘的常数
得到的最后结果就是O阶
int i,n=100,sum=0;
for(i=0;i<n;i++){
sum+=i;
}
上述代码时间复杂度为O(n),因为执行100次,循环的时间复杂度为循环体的时间复杂度乘该循环运行的次数。
int i,j,n=100,sum=0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
sum+=i;
}
}
时间复杂度为O(n2)。
int i,j,n=100,sum=0;
for(i=0;i<n;i++){
for(j=i;j<n;j++){
sum+=i;
}
}
当i=0时执行n次,i=1时执行n-1次,...... 时n+(n-1)+(n-2)+....+1=n(n+1)/2,因此根据策略为O(n2)
int i=1,n=100;
while(i<n){
i=i*2;
}
此程序是每次执行i=i*2然后和n比较,设执行次数为x,当执行x个2相乘的时候大于或者等于n就会推出循环即x*2=n,x=log(2)n,因此时间复杂度为O(logn)。
函数的时间复杂度分析:
int i,n=100,sum=0;
for(i=0;i<n;i++){
function(i);
}
void function(int count){
printf("%d",count);
}
函数的时间复杂度为O(1),即总体为O(n)。