1.如何衡量程序运行的效率
1.1.复杂度
复杂度是衡量代码运行效率的重要度量因素;
复杂度是一个关于输入数据量n的函数
- O(n)表示的是,复杂度与计算实例的个数n线性相关;
- O(logn)表示的是,复杂度与计算实例的个数n对数相关;
1.1.1. 复杂度的计算方法
O(n)和O(2n)表示的是同样的复杂度
O(2n)=O(n+n)=O(n)+O(n)
1.1.2.时间复杂度与代码的结构有关
- 一个顺序结构的代码,时间复杂度是O(1);
- 二分查找,或者采用分而治之的二分策略,时间复杂度是O(logn);
- 一个简单的for循环,时间复杂度是O(n);
- 两个顺序执行的for循环,时间复杂度是O(n)+O(n)=O(2n);
- 两个嵌套的for循环,时间复杂度是O(n²);
空间复杂度与数据结构的设计有关;
1.2.将“昂贵”的时间复杂度转换成“廉价的空间复杂度”
1.2.1.程序优化的最核心思路
- 第一步,暴力解法
在没有任何时间、空间的约束下,完成代码任务的开发 - 第二步,无效操作处理
将代码中的无效计算、无效存储剔除,降低时间复杂度 - 第三步,时空转换
设计合理的数据结构,完成时间复杂度向空间复杂度的转移