浙大数据结构与算法慕课随手记:第一讲 基本概念

1.1 什么是数据结构

数据存储要解决的问题:
1:如何插入新数据
2:如何查找指定的数据

例1:图书摆放问题
方法1:随便放,遍历查找
方法2:字母序,二分查找
方法3:先分类再字母序(缩小规模),定类+二分查找
——解决问题方法的效率,和数据的组织方式有关

例2:PrintN函数,顺序打印1-N
方法1:循环实现
方法2:递归实现(虽然简洁易理解,但空间占用太多)
——解决问题方法的效率,和空间的利用效率有关

例3:多项式计算
方法1:暴力模拟
方法2:结合律提取公因子,把幂计算简化为乘法计算
——解决问题方法的效率,和算法的巧妙程度有关

例4:矩阵的抽象数据类型定义

数据结构:数据对象的组织方式(逻辑结构+物理存储结构)+操作(算法实现)

  • 逻辑结构:一对一-线性结构、一对多-树型结构、多对多-图结构
  • 物理结构:逻辑结构在内存中的存储方式,如数组、链表等

抽象数据类型:

  • 抽象:不依赖于具体实现,只关心“是什么”,不关心“如何做到”
  • 数据类型:对象集+操作集(类封装两者)

1.2 什么是算法

算法:有限指令集(目标明确+计算机能处理+抽象描述)+有限步骤+产生输出

例1:选择排序算法的伪码描述
例2:PrintN函数递归方法:内存占用过多
例3:多项式计算:加减法速度远快于乘除

好的算法判断标准(n=需处理数据的规模):

  • 空间复杂度S(n)
  • 时间复杂度T(n)

分析一般算法效率时,关注:
最坏情况复杂度Tworst
平均复杂度Tavg(较难计算)

不做精细分析,只关心粗略增长趋势→复杂度的渐进表示法(最小上界、最大下界)
*logn增长最慢;n^2降为nlogn

复杂度分析小窍门
1:两段算法相加,复杂度=max上界;相乘,复杂度=上界乘积
2:多项式复杂度=阶数最高项
3:for循环时间复杂度=循环次数x循环体代玛复杂度
4:if-else结构复杂度=max(if条件判断和两分枝复杂度三选一)

1.3 应用实例:最大子列和问题

方法1:暴力法,O(N ^ 3)→O(N ^ 2)
方法2:分治法,分而治之,二分+递归,左+右+跨越边界,O(NlogN)
方法3:在线处理/动态规划法,O(N)
*在线:对每个输入数据即时处理,任何一个地方中止输入,均可正确输出当前解
*NA=Not Available

你可能感兴趣的:(理论知识)