数据结构时间复杂度
代码优化效率
优化目标:衡量程序运行的效率
- 时间复杂度 & 空间复杂度:关注时间或者空间消耗量与输入数据量之间的关系
计算方法
- 复杂度与具体的常系数无关
- 多项式级的复杂度相加时,选择高者做为结果
- O ( 1 ) O(1) O(1) 也表示一个特殊复杂度,与输入数据量 n n n 无关
复杂度与程序之间的关系
- 时间复杂度与 代码结构 高度相关
- 一个顺序结构的代码,时间复杂度是 O ( 1 ) O(1) O(1)
- 二分查找,采用分而治之的二分策略,时间复杂度是 O ( l o g n ) O(logn) O(logn)
- 一个简单的for循环,时间复杂度是 O ( n ) O(n) O(n)
- 两个顺序执行的for循环,时间复杂度是 O ( n ) O(n) O(n)
- 两个嵌套的for循环,时间复杂度是 O ( n 2 ) O(n^2) O(n2)
- 空间复杂度与 数据结构的选择 高度相关
如何下降复杂度呢?
- 第一步:暴力解法。在没有任什么时候间、空间约束下,完成代码任务的开发。
- 第二步:无效操做处理。将代码中的无效计算,无效存储剔除,下降时间或空间复杂度。
- 第三步:时空转换。设计合理数据结构,完成时间复杂度向空间复杂度的转移。
数据处理基本操做:增删查
-
前提:要想灵活使用数据结构,须要先弄清楚数据在代码中被处理、加工的最小单位动做,也就是数据结构的基本操做。数据结构
-
代码对数据的处理(可操做性类型少),而数据处理的操做就是找到须要处理的数据,计算结果,再进行保存便可。总结以下:优化
- 找到要处理的数据。这就是按照某些条件进行查找。
- 把结果存到一个新的内存空间中。这就是在现有数据上进行新增。
- 把结果存到一个已使用的内存空间中。这须要先删除内存空间中的已有数据,再新增新的数据。
-
基于数据处理操做分析,全部的代码对数据的处理也只有这 3 个基本操做(增删查),如何进行分析找到解决问题的最优方案呢?spa
- 首先,这段代码对数据进行了哪些操做?
- 其次,这些操做中,哪一个操做最影响效率,对时间复杂度的损耗最大?
- 最后,哪一种数据结构最能帮助你提升数据操做的使用效率?