3 算法的复杂度

算法的复杂度

1、算法的时间复杂度

事前预估算法时间开销T(n)与问题规模n的关系(T表示“time”)

记作:T(n)=O(f(n)) 叫做大O记法

随着n增大,T(n)增长最慢的算法为最优算法。

求时间复杂度:

注意:
1.可以忽略顺序执行的代码,它只会影响常数项
2.只需挑循环中的一个基本操作分析它的执行次数与n的关系即可
3.如果有多层嵌套循环,只需关注最深层循环循环了几次

步骤:
①找到一个基本操作(最深层循环)
②分析该基本操作的执行次数x与问题规模n的关系x=f(n)
③x的数量级O(x)就是算法时间复杂度T(n)

在这里插入图片描述

效率排序:
O(1)< O ( log ⁡ 2 n ) O(\log_{2}{n}) O(log2n)< O(n) < O ( n log ⁡ 2 n ) O(n\log_{2}{n}) O(nlog2n) <
O ( n 2 ) O(n^2) O(n2) < O ( n 3 ) O(n^3) O(n3)< O ( 2 n ) O(2^n) O(2n)< O ( n ! ) O(n!) O(n!)

在这里插入图片描述

三种复杂度
最坏时间复杂度:考虑输入数据“最坏”的情况
平均时间复杂度:考虑所有输入数据都等概率出现的情况
最好时间复杂度:考虑输入数据“最好”的情况

2、算法的空间复杂度

评估程序执行时所需的储存空间。

求空间复杂度:

  1. 普通程序
    ①找到所占空间大小与问题规模相关的变量
    ②分析所占空间x与问题规模n的关系x=f(n)
    ③x的数量级O(x)就是算法空间复杂度S(n)

  2. 递归程序
    ①找到递归调用的深度x与问题规模n的关系x=f(n)
    ②x的数量级O(x)就是算法空间复杂度S(n)
    注:有的算法各层函数所需存储空间不同,分析方法略有区别

空间复杂度用S(n)表示 S(space) eg.S(n)=O(n)

eg.
在这里插入图片描述

int n 4字节
int flag[n] 4*n字节
int i 4字节
上述代码所需内存空间=4+4n+4=4n+8 字节

所以时间复杂度为:S(n)=O(4)+O(4n)+O(4)

忽略常数项,只保留最高阶的项,且系数变为1,最终时间复杂度:S(n)=O(n)

以上图片来自王道数据结构视频,如侵权请联系删除

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值