
一起动脑筋 · 先看一个小故事
复杂的卡片游戏看不懂,女孩先只摆一张卡,再增加到两张、三张。
把过程摊开来看
- 一张直接知道结果
- 两张第一次需要比较
- 三张观察规则是否仍成立
- 更多寻找一般规律
从最小规模开始,可以看出初始化、边界和递推关系。
小例子不是为了替代大问题,而是帮助找到可以推广的理由。
01为什么先看小数据?
因为数据少时,我们可以手工把整个过程看清楚。
例如排序 10000 个数很难在纸上模拟,但 3 个数很容易。
02最简单情况能告诉我们什么?
规则
题目到底怎样变化?
边界
0、1 个元素怎么办?
规律
答案怎样随规模增长?
错误
自己的理解有没有矛盾?
03递归为什么特别需要最简单情况?
递归必须有基本情况。
例如:
factorial(0) = 1
最简单情况就是递归停止继续拆分的位置。
04动态规划也需要吗?
需要。动态规划常从最小状态开始建立答案。
虽然本网站后面再深入学习 DP,但现在先建立“先弄清最小情况”的习惯很重要。
05简单情况会不会误导?
可能。
只看一个小例子发现的“规律”不一定对所有输入都成立,所以还需要更多例子和证明。
06怎样选择小例子?
不要只选一个普通例子,还应该包括:
- 最小输入
- 相等数据
- 极端顺序
- 接近边界的情况
你已经知道了什么
- 小数据容易手工模拟和验证。
- 最简单情况能帮助发现规则和边界。
- 递归和动态规划都常依赖基础情况。
- 小例子可以帮助猜规律,但不能代替证明。
- 应主动构造不同类型的小例子。
下一篇:不知道怎么做?先试试暴力方法
轮到你来试一试
只用一张卡测试排序,能发现交换顺序写反吗?
想好了吗?点开看解释
通常不能,因为不需要交换。还应测试两张逆序和更多情况。