程序设计与算法基础 II
CM1 : 程序设计与算法导论
-
迷宫问题
- 问题描述
从出发点(入口)开始,在给定的空间中,沿可行的路径进行探索,直到达到目标(出口)。在资源勘探中,在战争或游戏中,都会有类似的情景,在给定的空间中,如森林、山洞、沙漠等,搜索特定目标,如出路、人或物等。这类问题都可以归结为迷宫问题。 - 问题简化
- 为了使探索方向一致,可在原来的迷宫地图四周都拓展一个点,值全部置为1,表示是墙。
- 用增量数组
DeltaXY
表示探索的方向
- 如何保留到达各点的坐标和到达时的探索方向?
- 选用数据结构——栈,栈内元素为行号
x
、列号y
、前点至这点的方向d
组成的三元组(x,y,d)
- 选用数据结构——栈,栈内元素为行号
- 如何避免兜死圈?
- 设置标志数组
mark[m][n]
,已探索过的点不需要再进入
- 设置标志数组
- 小结
- 数据结构有两大用途:
- 用于存放要处理的数据,如迷宫地图;
- 用于实现算法策略,如迷宫例子中探索方向增量数组、回溯的栈、避免重复走的标志数组或特殊标记
- 数据结构有两大用途:
- 问题描述
-
数据结构
-
带结构的数据元素的集合
-
数据结构由一个四元组来表示:
Data_Structure = (D, L, S, O)
其中:-
D (data) 是**数据元素的有限集,**是存储和操作的对象
-
L (logical structure)是数据元素集合D中数据元素之间客观存在的关系的有限集,称为逻辑结构
-
S (storage structure)是数据元素集合D和数据元素之间的关系集合L在计算机中的存储表示,称为存储结构或物理结构
-
O (operation) 是在数据元素集合D.上规定的一组操作
简言之,数据结构包含:数据元素、数据元素间的逻辑关系、逻辑关系在计算机中的存储表示、以及所规定的操作四部分
-
-
抽象数据类型(Abstract Data Type,ADT)
- ADT一般包含数据元素、数据元素之间关系及操作三要
素(D, R, O)
,其中:- D是数据元素集
- R是D上的关系集合
- O是对D的基本操作集
- ADT一般包含数据元素、数据元素之间关系及操作三要
-
-
算法
- 算法是求解特定问题步骤的有限序列。算法由步骤组成,每个步骤表示一个操作或任务,步骤序列是对问题求解过程的描述,按照步骤顺序,完成步骤所规定任务,就可以求解特定问题
- 算法可以用一个三元组来描述:
A=(S, D, R)
- S是步骤的有限集合
- D是算法求解问题所涉及的数据元素集合,是算法的操作或处理的对象,包括可能的输入和算法产生的输出
- R是步骤间的关系集合,由-一些控制结构组成
- 算法具有有穷性、确定性、可行性、输入与输出特性
- 算法设计要求:正确性、可读性、健壮性、高效性、灵活性、可重用性、自适应性
-
算法分析
- 时间复杂度
- 渐进分析、大O表示法
- 空间复杂度
- 指令空间、数据空间、环境栈空间
- 时间复杂度