本篇是笔者对
https://www.icourse163.org/course/PKU-1002534001
该视频的记录和一些个人理解
1.2问题求解:
问题求解过程举例-农夫狼羊过河问题
(1)问题抽象:
①只有人能过河
②狼和羊、羊和菜不能在没有人时共处
③船只有两个位置
(2)数据抽象:图模型
不合理状态:狼羊、人菜、羊菜、人狼、狼羊菜、人
10种合理的原岸存在状态(包括“空”)及关联关系
PS:原案状态中人羊狼菜可以通过“人羊一起走”这种方式变成狼菜这种原岸状态,就称这两种状态关联(图中线段连接)
(3)数据结构
相邻矩阵
PS:根据前面的结论,共有10中合理的状态,我们可以构建一个10*10的矩阵,在这个矩阵中行列两种状态关联的元素标记为1就得到如下矩阵
问题转化为“对上图求一个起始状态到终止状态的最短可达路径”
(4)算法抽象
①求最短可达路径(最优解)
②一般通过Dijkstra算法求解
注:在上述问题求解过程中如果从不同角度去抽象将会得到不同的数据模型,也就需要不同的算法模型去求解
小节:这一节主要讲了问题求解的一般方法,让我们对算法设计的过程大开眼界
1.3数据结构与抽象数据类型
(1)数据结构三大组成部分:
①逻辑结构
②存储结构
顺序结构:例如数组等线性结构。许多非顺序逻辑结构可以通过线性化变为顺序结构
链接:指针的地址指向关系。比如链表,一个变量同时包含数据和指向下个节点的指