时间复杂度
找到一个基本操作(最深层循环)
计算 分析该基本操作的执行次数*与问题规模n的关系x=f(n)
x的数量级O(x)就是算法时间复杂度T(n)
加法规则:O(f(n))+O(g(n))=O(max(f(n),g(n))
常用技巧 乘法规则:O(f(n))*O(g(n))=O(f(n)*g(n))
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
最坏时间复杂度:考虑输入数据“最坏”的情况
三种复杂度 平均时间复杂度:考虑所有输入数据都等概率出现的情况
最好时间复杂度:考虑输入数据“最好”的情况
空间复杂度
找到所占空间大小与问题规模相关的变量
普通程序 分析所占空间x与问题规模n的关系x=f(n)
计算 x的数量级O(x)就是算法空间复杂度S(n)
找到递归调用的深度x与问题规模n的关系x=f(n)
递归程序 x的数量级O(x)就是算法空间复杂度S(n)
注:有的算法各层函数所需存储空间不同
加法规则 O(f(n))+O(g(n))=O(max(f(n),g(n))
常用技巧 乘法规则 O(f(n))*O(g(n))=O(f(n)*g(n))
常对幂指阶 O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)