Bebras 的题目考的不是能查到的事实——它考的是一小撮反复出现的思维习惯,每次都披着不同的故事外衣登场。孩子一旦认出故事底下的那个习惯,题目就好做得多。以下是值得了解的那些,不带任何 computing 术语地讲清楚。
如果您还没读过,我们完整的 Bebras Challenge 指南介绍了它是什么、由谁主办、如何报名。这篇文章更深入一层:题目背后真正的思路是什么。
先老实交代一下范围——以下清单取材于我们自家的十二张 Bebras 记忆卡组,而不是 Bebras 完整的题库存档(这些题从不以历年真题的形式发布;题目只以互动形式在线出现)。所以请把接下来的内容当作对最常出现的思路的扎实入门,而非一份详尽清单。
算法:一套每次都管用的步骤
**算法(algorithm)**就是一份精确的步骤清单,只要照着做就能解决问题——没有比这更神秘的了。一份食谱是一个算法,一份织毛衣的图样是一个算法,一份从车站走到学校的路线说明也是一个算法。判断某样东西算不算算法的标准是:一个毫无想象力的执行者照着做,也能得出正确结果——这正是电脑能运行算法的原因,也正是 Bebras 喜欢考它的原因。典型的题目要么给孩子一个算法(机器人的一串指令、给方格上色的规则),问它会产生什么结果;要么给出一个结果,问是哪个算法造成的。
与这个概念配套的习惯是逐步演算(tracing):一步一步动手推演,而不是把说明读一遍、凭印象猜结果。Bebras 的题目就是故意用来惩罚粗略浏览的——它奖励的是那种手指按在当前位置、笔尖点在当前那条指令上、严格照着每一步指令去做的孩子。
三个构件:顺序、选择、重复
无论多复杂的算法,归根结底都由三种步骤构成:
- 顺序(sequence)——一步接一步。默认状态,没什么花巧,只是按顺序做事。
- 选择(selection)——一个是/否的判断,决定走两条路中的哪一条。「如果这格是黑色,就左转;否则继续走。」
- 重复(repetition)——同一组步骤反复运行几次。「重复四次」或「一直走到碰到墙为止」。
看出一道题究竟在考三者中的哪一个,就知道该怎么去推演它了。一道题里满是「如果」的判断,那就是道选择题——诀窍在于走对分支。一道题讲的是「每隔三格发生一次」,那就是道重复题——诀窍在于数对次数。
二进制:电脑如何用两个数字计数
普通数字是十进制——每往左一位,值就变成前一位的十倍(1、10、100、1000……)。二进制是二进位制(base 2)——每往左一位,值就变成前一位的两倍(1、2、4、8、16、32……),而且每一位只能是 0 或 1。
所以二进制数 1011 并不代表「一千零十一」——它代表 8 + 0 + 2 + 1 = 11。每一位其实就是一个开或关的开关,数值就是所有「开」着的位值加起来。这一点对 Bebras 很重要,因为电脑存储任何东西都用这种方式,所以关于灯泡、旗子或一排硬币的题目,往往就是披着外衣的二进制题,哪怕题目里从没出现「binary」这个词。
一个有用的附带事实:四个二进制位一共能表示 16 种不同的图案(从 0000 到 1111),因为每一位都会让可能性翻倍——2 × 2 × 2 × 2 = 16。每多一位,数量就再翻一倍,这就是为什么 Bebras 的答案常常恰好落在 2 的某次方上。
分解:把大问题拆开
一道 Bebras 题目在纸面上可能显得庞大无比——十二个朋友、三辆公交车、一整页的座位规则。**分解(decomposition)**正是计算机科学家对付这种情况的办法:把大问题拆成一个个能够真正核实的小问题。
具体来说就是:先把第 1 辆车的问题完全解决,再去想第 2 辆车;先处理座位规则,再处理行李规则。小问题有小而可核实的答案,而大答案不过是把这些小块拼回去而已。分解是「计算思维」四个经典习惯之一,另外三个是发现规律、抽象(忽略无关紧要的细节)和设计算法。
二分查找:靠不断折半找到答案
假设您要猜一个 1 到 100 之间的秘密数字,唯一能问的问题是「它比……大吗?」在最不走运的情况下,保证能问出答案所需的最少问题数是多少?
答案是 7——不是靠依次猜 1、2、3(那可能要试上一百次),而是每次都问剩下范围的中间值。问「比 50 大吗?」,不管答案是什么,一半的可能性都会消失:100 → 50 → 25 → 13 → 7 → 4 → 2 → 1,一共七次折半。
这叫二分查找(binary search),正是排好序的清单查找起来特别快的原因——也正是 Bebras 题目里经常出现「按顺序排列好的东西」的原因。
图:点、线,与最短路线
「点线图」里的一个点叫节点(node),也叫顶点(vertex);连接节点的线叫边(edge);整幅图叫作图(graph)——不是那种带 x、y 坐标轴的图,而是这种点线网络。计算机科学家会把「城镇与道路」「人与友谊」「任务与先后顺序」都画成同一种图,因为同一套方法对它们全都适用。
一道经典的 Bebras 题目会给出一张地图,城镇之间由道路相连,每条路标注了公里数,问从学校到游泳池的最短路线。陷阱在于选道路数最少的那条——但一条长的高速公路很容易就超过三条短巷的总长。可靠的方法是把每条路线的实际长度加起来,比较总和,选最小的那个(这正是 Dijkstra 算法的思路——卫星导航用的就是这个方法)。
奇偶性与不变量:什么是「无论怎么动都不变」的
一个杯子一开始正面朝上。您一次翻一下,翻了七次后停下。此刻它是哪一面朝上?
不需要逐次去追踪每一次翻转——只需要知道翻转的总次数是奇数还是偶数就够了,因为每一对翻转都会相互抵消。7 是奇数,所以杯子最后是倒扣的。这叫奇偶性(parity),是**不变量(invariant)**的一个例子——不管怎么操作都不会变、或者会以固定方式变化的东西。
Bebras 里那些关于开关灯、交换卡片,或在方格间跳来跳去的题目,往往一句话就能靠奇偶性解决——不管题目里描述了多少次操作。
系统性列举:不遗漏、不重复地数
如果您有三个不同的字母,想知道能排出多少种不同的顺序,可靠的方法绝不是随手写下几种排法、写不出新的就停手——那样您永远无法确定有没有漏掉或重复了。
可靠的方法是系统性列举(listing systematically):先固定第一个字母,再按固定的顺序把剩下的每一种排法都列出来——所有以 A 开头的排完,再排以 B 开头的,然后是 C。这样就能保证找全每一种排法,而且没有一种重复。对三个字母来说,三种起始字母各自留下两种排剩下两个字母的方式,所以 3 × 2 × 1 = 6 种排法。
有条理地列举、而不是抱着侥幸心理去猜——正是这个习惯赢下了 Bebras 的计数题。
把它们串起来
以上这些想法完全不需要电脑就能理解。它们都是孩子拿着铅笔、头脑清醒就能推演出来的东西:一步步推演、看清三个构件里用的是哪一个、记住二进制不过是不断翻倍、把大问题拆成小问题、靠折半逼近答案、找出什么是不变的、按顺序列举而不是瞎猜。
想看这些想法反过来会在哪里出错,请见Bebras 常见错误与认知误区。至于为什么由一位 maths 导师来讲这一切,Bebras 思维如何与 KS3 数学相通解释了这层重叠。
FAQ
我需要懂 computing 才能帮孩子准备 Bebras 吗?
不需要。Bebras 考的每一个概念——算法、二进制、分解、系统性列举——都能用大白话讲清楚,这篇文章正是这么做的。全程不需要您自己写过一行代码。
这份清单涵盖了 Bebras 可能考到的一切吗?
不是——它涵盖的是我们自家 Bebras 记忆卡组所覆盖的概念,这套卡组由十二张卡组成。Bebras 真正的题库要大得多,由 Raspberry Pi Foundation 主办,所以请把这篇当作对反复出现的核心思路的扎实入门,而非一份详尽大纲。
计算思维在 KS3 阶段是一门独立学科吗?
在 KS3 阶段并不算真正独立。它与孩子在 maths 课上已经练习的技能高度重叠——系统性列举、数字规律、位值、逻辑推理。我们在另一篇文章里专门探讨了这层联系。