数据结构时间复杂度

数据结构时间复杂度

代码优化效率

优化目标:衡量程序运行的效率
  • 时间复杂度 & 空间复杂度:关注时间或者空间消耗量与输入数据量之间的关系
计算方法
  • 复杂度与具体的常系数无关
  • 多项式级的复杂度相加时,选择高者作为结果
  • 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 个基本操作(增删查),如何进行分析找到解决问题的最优方案呢?

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

数据结构的时间复杂度

数据结构时间复杂度_第1张图片

你可能感兴趣的:(数据结构,leetcode,数据结构,算法,python)