数据结构与算法学习笔记

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的空间效率高

三.算法设计过程总结

分析时间复杂度、空间复杂度,选出好的算法

以上是关于数据结构与算法学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

学习数据结构笔记(18) --- [KMP算法]

学习笔记:python3,代码片段(2017)

尚硅谷算法与数据结构学习笔记05 -- 递归

数据结构与算法学习笔记(10) 排序

数据结构与算法学习笔记 查找

数据结构与算法学习笔记 查找