1 时间复杂度O(f(n))
执行次数T(n)关于问题规模n的函数,分析T(n)随n的变化情况确定T(n)的数量级,记为T(n)=O(f(n)),f(n)为量级(最高次数项与系数无关),且算法执行时间增长率和f(n)的增长率相同。
1.1例如:
计算 1 + 2 + 3 + … + n
累加算法1:输入问题规模n,循环执行了T(n)=n次,时间复杂度:O(n^1)
s=0
i=1
while i<=100
s=s+i
i=i+1
直接算法2:输入问题规模n,执行了T(n)=1次,时间复杂度:O(n^0)=O(1)
s=n*(n+1)/2
1.2 量级
常数阶(零阶)O(1);
线性阶(一阶)O(n):如单层循环;
平方阶(二阶)O(n^2):如嵌套循环;
对数阶:2^x=n,执行一定次数x达到问题规模n,时间复杂度,计为T(n)=O(log2n);
立方阶(三阶)O(n^3);
n倍对数阶O(nlog2n);
指数阶O(2^x);
1.3 最坏情况和最好情况及正常平均的时间复杂度,其中主要考虑最坏情况的时间复杂度
2 空间复杂度
算法复杂度是指计算算法所需的存储空间,算法空间复杂度S(n)=O(f(n))
f(n)是关于问题规模n所占空间的函数。
2.1 例如
方式一:每给一个年份,写一个判断是否为闰年的算法;
方式二:事先编制好所有年份(共2050年)成一个列表字典,这样可以直接查询得到;
两种方式区别:方式一节省了空间(成本)但是时间可能会长,方式二节省了时间(效率)但是耗费了内存,当然两者可以相互换取,也要分根据计算机情况而定;
2.2 特别
空间和时间复杂度的互换,采用方式一和二要视情况而定,例如内存只有64k,你方式二列表字典2050个元素的内存比64k大,无法运行此算法,此时选择方式最好