问题分解
把大问题拆成几个能单独解决的小问题,再拼回去完成原来的事。
它是什么
问题分解是把一件大事切开。每一块都能单独完成;全部做完,原来的大事也就完成了。
大事会把脑子堵住。「办一次班级水果分享」一下子冒出人数、采购、刀子、盘子。混在一起,就不知道从哪下手。
切开之后,每一块都有自己的答案。统计人数是一块,买水果是一块,切块分盘是一块。你可以先做这一块,同桌做那一块。
名字从哪来
切开大事来解决,人类早就在用。盖房子先打地基,写长故事先列提纲,都是分解。
2006 年,计算机科学家周以真(Jeannette Wing)把这件事说给更多人听。她称之为计算思维,英文是 computational thinking。其中一块,就是:遇到大问题,先拆成小问题。
CS Unplugged《不插电的计算机科学》用身体游戏练这套本领。不用电脑,也能练习「大事怎么切」。
分解不是把问题变没。它是换一种拿得动的拿法。
它怎么工作
用三句话检查切得对不对:
- 每个小问题有自己的答案
- 小问题之间尽量少互相卡住
- 全部做完,原来的大事也完成了
如果两块必须死死等对方,拆得还不够干净。如果漏了一块,拼回去会缺角。
拆到「能动手做」就停。「拿一只碗」不必再拆成十步——拆太碎,步骤会比问题还难读。反过来,只写「认真一点」,等于没拆。
办水果分享,可以这样切:
- 统计:有多少人要来
- 采购:每种水果买多少
- 分配:每人能分到几块
算全班平均身高,也可以切:
- 收集每人身高
- 确认人数
- 求和
- 除以人数
每一块都能检查。人数错了,平均数一定错。所以「确认人数」值得单独成为一块。
切完以后,再用 顺序流程 排出先后。分解管切块,流程管次序。
生活里在哪里
- 春游:路线、午餐、安全员、集合时间
- 做手抄报:题目、资料、画、抄写
- 收拾房间:衣服、书、垃圾、地板
- 写一篇作文:开头、中间三件事、结尾
- 认一只猫:先看颜色,再看体型,再看项圈,见 特征
科学家也这样工作。把「认识天气」拆成温度、风力、云量,再分别测量;把「做一个判断」拆成填表和规则,见 场景建模。
和相近概念的差别
| 名称 | 它在做 |
|---|---|
| 问题分解 | 把大事切成能下手的小块 |
| 顺序流程 | 给这些小块排先后 |
| 特征 | 抽出能观察、能填写的信息 |
| 规律 | 在切开的材料里找重复 |
分解不是越碎越好,也不是把目标改掉。「办水果分享」拆完,目标仍是办成分享,不是变成「写一篇关于水果的作文」。
如果小问题拼不回原来的目标,切法就要改。
常见误会
误会 1:切出来的小问题仍然一样大。
「把整场运动会办好」切成「把上午办好」「把下午办好」,还是太大。
误会 2:小问题互相抢同一件没准备好的数据。
还没数人数,就去买「每人两个」的苹果,两块缠在一起了。
误会 3:拆完拼不回原来的目标。
补救办法:写一句「做完这些,原来那件事就完成了吗?」如果答不上来,就还要调整切法。
误会 4:分解只属于电脑课。
收拾书包、安排作业、规划旅行,都在分解。计算思维先是一种想事的方法。
想知道更多
- 活动:CS Unplugged《不插电的计算机科学》。用卡片、绳子、教室地板把大任务拆开玩,不必插电。
- 纪录片:法国片《维度:数学漫步》(Dimensions)。复杂形状也是先拆成更能看清的部分。
- 生活作业:选一件这周要完成的大事,只写三块小任务。明天先做最小的那一块。
未登录时不会保存学习进度