如何推导大O阶:
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项相乘的常数。
结果就是大O阶。
常数阶:
eg:
高斯算法:f(n)
int a = 0,b=n;
sum = (a+b)*b/2
syso(sum)
这个时间复杂度是O[1]
因为真正耗费时间的是中间这句算法,剩下两句跟n没有关系
如果变成
int a = 0,b=n;
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
syso(sum)
这个时间复杂度还是O[1]为什么:因为执行的代码次数,与n的大小并无关系。
线性阶:
对数阶:
平方阶:
常用的时间复杂度耗费时间从小到大依次是:
O[1] < O[logn] < O[n] < O[nlogn] < O[n^2] < O[n^3] < O[2^n] < O[n!] < O[n^n]