女孩和机器人一起思考

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

复杂的卡片游戏看不懂,女孩先只摆一张卡,再增加到两张、三张。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 一张直接知道结果
  2. 两张第一次需要比较
  3. 三张观察规则是否仍成立
  4. 更多寻找一般规律

从最小规模开始,可以看出初始化、边界和递推关系。

小例子不是为了替代大问题,而是帮助找到可以推广的理由。

01为什么先看小数据?

因为数据少时,我们可以手工把整个过程看清楚。

例如排序 10000 个数很难在纸上模拟,但 3 个数很容易。

02最简单情况能告诉我们什么?

规则

题目到底怎样变化?

边界

0、1 个元素怎么办?

规律

答案怎样随规模增长?

错误

自己的理解有没有矛盾?

03递归为什么特别需要最简单情况?

递归必须有基本情况。

例如:

factorial(0) = 1

最简单情况就是递归停止继续拆分的位置。

04动态规划也需要吗?

需要。动态规划常从最小状态开始建立答案。

虽然本网站后面再深入学习 DP,但现在先建立“先弄清最小情况”的习惯很重要。

05简单情况会不会误导?

可能。

只看一个小例子发现的“规律”不一定对所有输入都成立,所以还需要更多例子和证明。

06怎样选择小例子?

不要只选一个普通例子,还应该包括:

  • 最小输入
  • 相等数据
  • 极端顺序
  • 接近边界的情况

你已经知道了什么

  • 小数据容易手工模拟和验证。
  • 最简单情况能帮助发现规则和边界。
  • 递归和动态规划都常依赖基础情况。
  • 小例子可以帮助猜规律,但不能代替证明。
  • 应主动构造不同类型的小例子。

下一篇:不知道怎么做?先试试暴力方法

轮到你来试一试

只用一张卡测试排序,能发现交换顺序写反吗?

想好了吗?点开看解释

通常不能,因为不需要交换。还应测试两张逆序和更多情况。