时间复杂度
假设算法要处理的数据总量是x,x要足够大,算法为了达到某个目的(排序,插入,删除)需要的计算次数为y
计算公式:
当x足够大时,a、b的值不足以影响x,y的值和x直接相关
y=ax+b a是系数,b是常数 y=x 时间复杂度为O(n)
y= ax^2+bx+c a、b是系数,c是常熟 y=x^2 时间复杂度为O(n^2)
y=a a是常数 y=1 时间复杂度为O(1)
a^y=x a是系数 y=logax 时间复杂度为O(logn)
1、长度为x的无序数组,从中找一个值a,求时间复杂度
分析:a有可能在第一个位置,查找次数为1
a有可能在最后一个位置,查找次数为x
平均查找次数:x/2
y = x / 2 可以看作为y = x 所以时间复杂度为O(n)
2、从1加到x,求时间复杂度
分析:等差数列求和:sum=(1+x)*x/2 时间复杂度O(1)
for循环求和:需要运行x次 时间复杂度为O(n)
3、冒泡排序:O(n^2)
4、二分查找法:O(logn)
快速求时间复杂度的方法:
假设数据总量是x
计算次数与x无关O(1)
直接对问题规模下手O(n)
k层关于n的循环O(n^k)
每次循环数据总量减半O(logn)
如果无法直接看出,则需要求出消耗的计算次数y和数据总量x的关系,根据上方计算公式得出时间复杂度