算法的时间复杂度与空间复杂度

主要材料来源

时间复杂度

  • 概念
    • 执行当前算法所消耗的时间(最坏情况的运行时间)
  • 推导O阶的方法
    • 用常数1取代运行时间中的所有加法常数
    • 在修改后的运行次数函数中,只保留最高阶项。
    • 如果最高阶项存在且不是1,则去掉该最高阶项系数。
    • 得到的最后结果就是O
  • 常用的时间复杂度所耗费的时间从小到大依次是
    O ( 1 ) < O ( l o g n ) < O ( n ) < O ( n l o g n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
  • 常见复杂度量级
    • 常数阶O(1):没有循环等复杂结构
    • 线性阶O(n):循环 n n n
      i = 0
      while i <= n:
        i += 1
      
    • 对数阶O(log(n))
      i = 1
      while i <= n:
         i *= m
      
      m m m为常数,则循环次数 x x x m x = n ⇒ x = l o g m n m^x = n \Rightarrow x = log_m{n} mx=nx=logmn,故量级为: l o g ( n ) log(n) log(n)
    • 线性对数阶O(nlog(n)):将复杂度为对数阶O(log(n))的代码循环 n n n次,则其复杂度为: n × l o g ( n ) n \times log(n) n×log(n),即:O(nlog(n))
    • 平方阶O(n²):复杂度为O(n)的代码嵌套循环
    • 立方阶O(n³) k k k次方阶O(n^k):同O(n²)
  • 常见排序算法复杂度
排序法平均时间最差情况稳定度额外空间备注
冒泡 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2)稳定 O ( 1 ) O(1) O(1) n n n小时较好
交换 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2)不稳定 O ( 1 ) O(1) O(1) n n n小时较好
选择 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2)不稳定 O ( 1 ) O(1) O(1) n n n小时较好
插入 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2)稳定 O ( 1 ) O(1) O(1)大部分已排序时较好
基数 O ( l o g R B ) O(log_R{B}) O(logRB) O ( l o g R B ) O(log_R{B}) O(logRB)稳定 O ( n ) O(n) O(n) B B B是真数(0-9)
R R R是基数(个十百)
Shell O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n)) O ( n s ) , 1 < s < 2 O(n^s), 1 < s < 2 O(ns),1<s<2不稳定 O ( 1 ) O(1) O(1) s s s是所选分组
快速 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n)) O ( n 2 ) O(n^2) O(n2)不稳定 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n)) n n n大时较好
归并 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n)) O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))稳定 O ( 1 ) O(1) O(1) n n n大时较好
O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n)) O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))不稳定 O ( 1 ) O(1) O(1) n n n大时较好

空间复杂度

  • 概念
    • 执行当前算法需要占用的内存空间
  • 常见复杂度量级
    • O(1):算法执行所需要的临时空间不随着某个变量 n n n的大小而变化
      • 场景
        • 变量赋值(变量分配的内存不会随着处理数据量的变化而变化)
        • 变量数学计算(同上)
        x = 91
        y = 100
        while y > 0:
           if x > 100:
              x -= 10
              y -= 1
           else:
             x += 1
        
    • O(n):数组,列表等,随着元素的增多,内存将会增加

两者都平衡

  • 判断是否闰年
    • 空间复杂度 > 时间复杂度:算法判断
    • 时间复杂度 > 空间复杂度:列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值