入门篇-复杂度分析:时间和空间

入门篇-复杂度分析:时间和空间

01 | 前言

1、导读

1)数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间,在这里执行效率是算法一个非常重要的考量指标。
2)复杂度分析是整个算法学习的精髓,只要掌握它,数据结构和算法内容基本上就掌握了一半。

02 | 复杂度分析

1、事后统计法

1)定义:把代码跑一遍,通过统计、监控来计算算法的执行时间和占用内存大小。
2)局限:

  1. 测试结果非常依赖测试环境,测试环境中硬件的不同会对测试结果有很大的影响
  2. 测试结果受数据规模的影响很大

3)反思:我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法,即时间、空间复杂度分析方法

2、大O复杂度表示法

1)所有代码的执行时间T(n)与每行代码的执行次数n成正比。
2)T(n)表示代码执行的时间;n表示数据规模的大小;f(n)表示每行代码执行的次数总和,这是一个公式:T(n)=O(f(n))
3)当n很大时,公式中的低阶、常量、系数三部分并不左右增长趋势,所以可以忽略。
4)大 O 时间复杂度实际上并不具体表示代码真正的执行时间,而是表示代码执行时间随数据规模增长的变化趋势,所以,也叫作渐进时间复杂度,简称时间复杂度
5)常用的时间复杂度:O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

03 | 时间复杂度分析

1、三个比较实用的方法

1)只关注循环执行次数最多的一段代码
2)加法法则:总复杂度等于量级最大的那段代码的复杂度
3)乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
4)小结:复杂度分析的关键在于“熟练”

04 | 空间复杂度分析

1、定义

1)空间复杂度全称就是渐进空间复杂度,表示算法的存储空间与数据规模之间的增长关系

2、常见的空间复杂度

1)常见的空间复杂度就是 O(1)、O(n)、O(n^2 ),像 O(logn)、O(nlogn) 这样的对数阶复杂度平时都用不到
2)对于空间复杂度,掌握上述的内容已经足够了

05 | 常见时间复杂度实例分析

1、O(1)

1)O(1) 只是常量级时间复杂度的一种表示方法,并不是指只执行了一行代码
2)一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)

2、O(logn)、O(nlogn)

1)对数阶时间复杂度非常常见,同时也是最难分析的一种时间复杂度
2)例子:for(int i=1; i < n; i=i*2) ,变量 i 的值从 1 开始取,每循环一次就乘以 2,执行次数x=logn

3、O(m+n)、O(m*n)

1)代码的复杂度由两个数据的规模来决定

06 | 小结

1、复杂度分析

1)复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低
2)常见的复杂度并不多,从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n^2)
3)常用的时间复杂度:O(1) < O(logn) < (n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n) < O(n!) < O(n^n)

2、大O复杂度分析
在这里插入图片描述
3、常用数据结构的时间和空间复杂度
在这里插入图片描述
4、数组排序算法时间和空间复杂度
在这里插入图片描述

07 | 思维导图

1、入门篇-时间和空间复杂度分析思维导图
在这里插入图片描述

参考文献:

[1] 王争. 数据结构和算法之美[M]. 极客时间, 2018.
[2] 图片取自网络https://www.bigocheatsheet.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值