女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

女孩要找班里最高的人。机器人不需要保存鞋子颜色,但要保存身高,以及必要时的姓名。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 现实对象同学
  2. 相关数据身高与身份
  3. 计算目标最大身高
  4. 返回现实对应的同学

建模把现实任务变成可以计算的数据和关系。

只保留影响答案的信息,同时别丢掉题目需要的对应关系。若要回答“谁最高”,光有一堆高度还不够。

01什么叫“建模”?

这里的建模不是画 3D 模型,而是:

把现实描述 → 转换成程序能处理的数据和关系

02哪些故事细节可以丢掉?

假设题目说“小明坐公交经过若干站,每站人数会变化”。

如果题目只问“车上最多有多少人”,那么车的颜色、天气、站名可能都不重要。

03怎样找真正需要的数据?

对象

问题里有哪些东西?

属性

每个对象有哪些有用数据?

关系

对象之间怎样连接或影响?

04什么时候用数组?

如果对象是一串有顺序的数据,例如每天温度、同学成绩、路线上每一站人数,数组通常很自然。

05什么时候想到图?

如果问题描述城市和道路、朋友关系、网页链接等“一般连接关系”,可以把对象看成顶点,连接看成边。

06什么叫状态?

状态是解决问题时,描述“当前情况”所需的最小信息。

例如迷宫搜索中,最基本状态可以是:

(row, col)

如果还有钥匙状态,可能需要:

(row, col, hasKey)

07模型是不是越详细越好?

不是。

你已经知道了什么

  • 建模是把故事转换成数据和关系。
  • 要去掉与答案无关的背景细节。
  • 数组、树、图、状态都是常见表示方法。
  • 状态应包含足够信息,但不应无意义膨胀。
  • 好的建模常常决定后面的算法是否自然。

下一篇:怎样把大问题拆成小问题?

轮到你来试一试

把姓名丢掉,只保存身高并排序,还能直接说出谁最高吗?

想好了吗?点开看解释

不能可靠恢复身份。应一起保留姓名、编号或原位置。