day02数据结构与算法之美(如何分析、统计算法的执行效率和资源消耗)

复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构与算法的内容基本上就掌握了一半。
一、为什么要复杂度分析
①测试结果非常依赖测试的环境;
②测试结果受数据规模的影响很大;
③掌握复杂度分析,将能编写出性能更优的代码,有利于降低系统开发和维护成本。
二、时间复杂度(渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系)分析
时间复杂度分析法则:
①只关注循环执行次数最多的一段代码;
②加法法则:总复杂度等于量级最大的那段代码的复杂度;
③乘法法则:嵌套的代码的复杂度等于嵌套内外的代码的复杂度的乘积;
复杂度量级:

名称 复杂度
常数阶 O(1)
对数阶 O(logn)
线性阶 O(n)
线性对数阶 O(nlogn)
平方阶 O(n2)
立方阶 O(n3)
k次方阶 O(nk)
指数阶 O(2n)
阶乘阶 O(n!)

day02数据结构与算法之美(如何分析、统计算法的执行效率和资源消耗)
三、空间复杂度(表示算法的存储空间与数据规模之间的增长关系)分析
常见的空间复杂度都是O(1)、O(n)、O(n2)。
四、如何掌握好复杂度分析方法?
复杂度分析关键在于多练,所谓孰能生巧