算法时间复杂度
1.常数阶:
int sum = 0, n = 100;//执行一次
sum = (1+n)*n/2;//执行一次
printf("%d", sum);//执行一次
这个算法的运行次数函数f(n) = 3。根据推到大o阶的方法, 第一步就是把常熟项3改为1.保留最高阶, 发现并没有最高阶项,
所以这个算法的时间复杂度为o(1).
2.线性阶:
for(int i=0; i < n; i++)
3.对数阶
while(int count < n){
count = count * 2 // 由于每次count*2以后,就距离n更近一分, 由2的X次方=n得到 x=log2^n所以世界复杂度为O(logn)
}
4.平方阶
for(int i = 0; i < n; i++)
for(j = 0; j < n; j++)//时间复杂度为O{n^2}
for(int i = 0; i < n; i++)
for(int j = i; j < n; j++)
这里的时间复杂度为n(n+1)/2=n^2/2+n/2,
推导大O阶的方法:第一条没有加法常熟不予考虑;第二条只保留最高阶项,因此保留n^2/2;第三条,除去这个项相乘的常数,也就是除去1/2,最终这段代码的时间复杂度为O{n^2}
常用的时间复杂度所耗费的时间从小到大依次是
O(1)<O(logn)<O{n}<O{nlogn}<O{n^2}<O{n^3}<O{2^n}<O{n!}<O{n^n}