课程:【浙江大学】数据结构_哔哩哔哩_bilibili
抽象数据类型
数据类型:
- 数据对象集
- 数据集合相关联的操作集
抽象:
描述数据类型的方法不依赖于具体实现
- 与存放数据的机器无关
- 与数据存储的物理结构无关
- 与实现操作的算法和编程语言均无关
总体来说:只描述数据对低昂集和相关操作集“是什么”,并不涉及“如何做到”的问题
例如:“矩阵”的抽象数据类型定义
类型名称:矩阵(Matrix)
数据对象集:一个MxN的矩阵A=(a)(=1,....M;j=1......N)由M×N个三元组<a,i,j>构成,其中a是矩阵元素的值,i是元素所在的行号,j是元素所在的列号。
操作集:对于任意矩阵A、B、C ∈ Matrix,以及整数i、j、M、N
- Matrix Create(intM,intN): 返回一个xN的空矩阵:
- int GetMaxRow(Matrix A): 返回矩阵A的总行数;
- int GetMaxCol(Matrix A): 返回矩阵A的总列数;
- ElementType GetEntry(Matrix A,int i,int j): 返回矩阵A的第i行、第j列的元素;
- Matrix Add(Matrix A,Matrix B): 如果A和B的行、列数一致,则返回矩阵C=A+B,否则返回错误标志;
- Matrix Multiply(Matrix A,Matrix B): 如果A的列数等于B的行数,则返回矩阵C=AB,否则返回错误标志
算法
定义:
- 是一个有限指令集
- 接受一些输入(有些情况下不需要输入)
- 产生输出
- 一定在有限步骤之后终止
- 每一条指令必须
- 有充分明确的目标,不可以有歧义
- 在计算机能处理的范围之内
- 描述应不依赖于任何一种计算机语言以及具体的实现手段
什么是好的算法:
两种复杂度
- 空间复杂度S(n)-------据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。
- 时间复杂度T(n)-------根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果
在分析一半算法的效率时,我们经常关注下面两种复杂度
- 最坏情况复杂度T worst(n)
- 平均复杂度T avg(n)
复杂度的间接表示法
- O表示这组数据Tn的一个上界
- Ω表示Tn的一个下界
- θ表示既是上界也是下界
复杂度分析的窍门
- 若T(n)是关于n的k阶多项式,那么真正起作用的,就只有最大的那一项,其他的所有项都可以忽略不计
- 一个for循环的时间复杂度等于循环次数乘以循环体代码的复杂度
- if-else结构的复杂度取决于if的条件判断复杂度和两个分支部分的复杂度,总体复杂度取三者中最大的
例子:分而治之
竖线右边两种情况:1,只有一个元素的子列→5。2,有两个元素的子列→-2+5=3。5大,左边一个1一个-3,1大。最后1+5=6