如何求解问题–数据结构与算法入门
在学习数据结构与算法前,我们大多有这样的困惑,难道学习了数据结构与算法就能帮助我们解决学习Java、Python时的大作业吗?数据结构与算法是什么?
回答这个问题之前,我们先来想想这样一个问题–如何用程序求解一个问题?
Pascal之父Nicklaus Writh认为程序(Programs) =数据结构(Data Structure)+算法(Alforithm),也就是说,首先确定问题中的数据及数据之间的关系,据此确定存储和表示数据的数据结构;然后指定一系列的处理数据的策略,求解问题
综上,用计算机求解问题的步骤是:
- 分析问题,确定数据及数据间的关系
- 设计一个能解决具有这些关系的数据的算法
- 编程调试
农夫过河问题
- 问题:
- 人、狼、羊、菜如何全部从河的一案到另一岸?
- 问题描述:
- 人、狼、羊、菜在岸的一边
- 船只有两个位置,只有人能撑船
- 狼羊、羊菜不能在无人时共处
在尝试解决这个问题之前,我们先思考以下几个问题:
- 研究的对象是什么,它们之间存在什么样的关系?(逻辑结构)
- 对象及其关系如何映射到计算机内部,变为计算机可以表示和处理的形式?(存储结构)
- 解题步骤应该如何设计?(算法)
- 解题过程如何映射为一个计算过程?(编程)
第一个问题:研究的对象是什么,它们之间存在什么样的关系?(逻辑结构)
对象:所有合理的“原岸状态”
关系:状态之间的转换
剔除其中不合理的状态
在原岸中共有以上10种状态,这10中状态可以相互转换,从一种状态转换为另一种状态。根据问题要求,需要使得由人狼羊菜
转为空
。
上图中任何一条由人狼羊菜
到空
都可以解决此问题。
问题二:对象及其关系如何映射到计算机内部,变为计算机可以表示和处理的形式?(存储结构)
图的临阶矩阵表示法
说明:整理自老师课件