数据结构时间复杂度

数据结构时间复杂度

代码优化效率

优化目标:衡量程序运行的效率
  • 时间复杂度 & 空间复杂度:关注时间或者空间消耗量与输入数据量之间的关系
计算方法
  • 复杂度与具体的常系数无关
  • 多项式级的复杂度相加时,选择高者做为结果
  • 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

    • 首先,这段代码对数据进行了哪些操做?
    • 其次,这些操做中,哪一个操做最影响效率,对时间复杂度的损耗最大?
    • 最后,哪一种数据结构最能帮助你提升数据操做的使用效率?

数据结构的时间复杂度

在这里插入图片描述

相关文章
相关标签/搜索