
一起动脑筋 · 先看一个小故事
女孩要找班里最高的人。机器人不需要保存鞋子颜色,但要保存身高,以及必要时的姓名。
把过程摊开来看
- 现实对象同学
- 相关数据身高与身份
- 计算目标最大身高
- 返回现实对应的同学
建模把现实任务变成可以计算的数据和关系。
只保留影响答案的信息,同时别丢掉题目需要的对应关系。若要回答“谁最高”,光有一堆高度还不够。
01什么叫“建模”?
这里的建模不是画 3D 模型,而是:
把现实描述 → 转换成程序能处理的数据和关系
02哪些故事细节可以丢掉?
假设题目说“小明坐公交经过若干站,每站人数会变化”。
如果题目只问“车上最多有多少人”,那么车的颜色、天气、站名可能都不重要。
03怎样找真正需要的数据?
对象
问题里有哪些东西?
属性
每个对象有哪些有用数据?
关系
对象之间怎样连接或影响?
04什么时候用数组?
如果对象是一串有顺序的数据,例如每天温度、同学成绩、路线上每一站人数,数组通常很自然。
05什么时候想到图?
如果问题描述城市和道路、朋友关系、网页链接等“一般连接关系”,可以把对象看成顶点,连接看成边。
06什么叫状态?
状态是解决问题时,描述“当前情况”所需的最小信息。
例如迷宫搜索中,最基本状态可以是:
(row, col)
如果还有钥匙状态,可能需要:
(row, col, hasKey)
07模型是不是越详细越好?
不是。
你已经知道了什么
- 建模是把故事转换成数据和关系。
- 要去掉与答案无关的背景细节。
- 数组、树、图、状态都是常见表示方法。
- 状态应包含足够信息,但不应无意义膨胀。
- 好的建模常常决定后面的算法是否自然。
下一篇:怎样把大问题拆成小问题?
轮到你来试一试
把姓名丢掉,只保存身高并排序,还能直接说出谁最高吗?
想好了吗?点开看解释
不能可靠恢复身份。应一起保留姓名、编号或原位置。