数据结构与算法学习笔记
Posted 临风而眠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法学习笔记相关的知识,希望对你有一定的参考价值。
数据结构与算法学习笔记(2):算法与算法分析
本系列笔记为跟着B站上王卓老师的教程学习所记录的笔记
一.算法基本概念
二.算法效率
算法效率的度量
算法效率的度量通过时间复杂度和空间复杂度来描述
1.算法时间效率的度量
每条语句的执行次数也成为每条语句频度
注:
因为与算法无关,所以评估算法时:
这样就可以独立于不同软硬件环境来分析算法的时间性能
例:矩阵乘法
第一行代码 1~n是n次,但是最后还要判断一次是否满足i<=n,判断出来不满足,但语句本身还是执行了
第二行代码 外循环for(i=1;i<=n;i++) 成功执行n次,而 for(j=1;j<=n;j++)每经历一次外循环,自己都要执行n+1次(加的1是最后一次判断)
第三行代码 for(i=1;i<=n;i++) 成功执行n次,其中每一次for(j=1;j<=n;j++)都会成功执行n次
第四行代码 前面的两层循环n*n次,而每次它自己要n+1次
第五行代码 前面的三层循环n*n*n次
2.时间复杂度
定义
T(n)的数量级
例:矩阵乘法时间复杂度分析(上面的例子)
显然,我们只要考虑n的次数最高的项,所以不必考虑所有操作的执行次数
基本语句
找出基本语句
- 算法中重复执行次数和算法执行时间成正比的语句
- 对算法运行时间的贡献最大
- 执行次数最多
问题规模n
描述处理的数据量
3.计算时间复杂度
步骤:
- 找出语句频度最大的语句作为基本语句
- 计算基本语句的频度得到问题规模n的某个函数f(n)
- 取其数量级用符合"O"表示
例1
T ( n ) = O ( n 2 ) T(n)=O(n^2) T(n)=O(n2)
例2
例3
矩阵乘法
▲例4
▲例5
对数级
输入数据集的影响
算法基本操作的执行次数有时不仅与问题规模n有关,还与输入的数据集有关
例
- 如果第一个就是e,那么循环只要执行1次
- 如果最后一个是e,就要n次
平均 n 2 \\dfrac{n}{2} 2n次
最坏时间复杂度
一般考虑前两个,但有时候平均时间复杂度比较难算
复杂算法时间复杂度的计算
- 加法规则,乘法规则
4.算法时间效率的比较
- 当问题规模n很大时,指数时间算法和多项式时间算法在所需时间上相差巨大
- 时间复杂度T(n)按数量级递增顺序如下:
5.算法空间效率的度量
①空间复杂度
- 即算法所需存储空间的度量
- 记作 S ( n ) = O ( f ( n ) ) S(n)=O(f(n)) S(n)=O(f(n)),其中 n n n为问题规模
②算法要占据的空间
- 算法本身占据的空间:输入/输出,指令,常数,变量等
- 算法要使用的辅助空间
例
算法1依次头尾交换,t开辟的就是临时辅助空间
S ( n ) = O ( 1 ) S(n)=O(1) S(n)=O(1),原地工作,是常数阶,只用了t一个临时变量,空间与循环中 n n n的大小无关
算法2开辟了一个新数组
S ( n ) = O ( n ) S(n)=O(n) S(n)=O(n),是一次阶
故算法1比算法2的空间效率高
三.算法设计过程总结
分析时间复杂度、空间复杂度,选出好的算法
以上是关于数据结构与算法学习笔记的主要内容,如果未能解决你的问题,请参考以下文章