版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38371360/article/details/86179695
此文为FishC大佬《数据结构与算法》第三、四、五讲时间复杂度的笔记整理。
判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,而更应该关注主项(最高项)的阶数。
算法时间复杂度
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n))。
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
如果分析一个算法的时间复杂度呢?
- 用常数1取代运行时间中的所有加法常数。
- 在修改后的运行次数函数中,只保留最高阶项
- 循环的时间复杂度 = 循环体的复杂度 * 该循环运行的次数
- 如果最高阶项存在且不是1,则去除与这个项相乘的常数
- 得到的最终结果就是大O阶
常数阶、平方阶都比较简单,下面来看下对数阶。
int i = 1, n = 100;
while (i < n )
{
i = i * 2;
}
所以这个循环的时间复杂度为O(logn)
n++;
function(n);
for (i = 0; i < n; i++) {
function(i);
}
for (i = 0; i < n; i++) {
for (j = i; j < n; j++) {
printf("%d",j)
}
}
时间复杂度为:
常用的时间复杂度所耗费的时间从小到大依次是: