Matrix67: The Aha Moments
今年我为北京世纪坛的数学益智游戏展贡献了不少内容。我打算在这里记录一些自己的创作、发现、收获和心得。这是该系列的第三篇。 今年的数学益智游戏展有一个特色,就是到访者可以购买一个小册子,这可以为自己的参展体验加分。我们内部把它叫作“任务单”。任务单里有很多任务,对应了展会中的各种项目。完成任务可以获得印章,赢取奖励。为了增加任务单的附加价值,任务单上还附赠了很多简单展品的高级玩法说明。这里举一个有趣的例子。 展会现场有很多冰糕棍,可以用来做冰糕棍炸弹。任务单上给出了冰糕棍的另一种玩法——Nim 游戏。将冰糕棍从左到右摆成若干堆。两人轮流从其中一堆冰糕棍中取走任意数量的冰糕棍(可以全部取走,但不能不取)。取走最后一根冰糕棍的玩家获胜。 考虑到任务单的读者可能已经熟悉 Nim 游戏了,因此为了让所有人都能有新的收获,我补充了一些不太常见的 Nim 游戏变种。我一共准备了 10 条补充规则。游戏开始前,双方可以任选其中一条来玩。 每次只能从最左端或者最右端的那一堆中取冰糕棍。 每次只能从冰糕棍数最多的那一堆中取冰糕棍(如果冰糕棍数最多的堆出现了并列的情况,任选其中一堆即可)。 每次只能从冰糕棍数最少的那一堆中取冰糕棍(如果冰糕棍数最少的堆出现了并列的情况,任选其中一堆即可)。 第一个人可以从任意一堆中取冰糕棍,今后每个人只能从和刚才不同的堆中取冰糕棍。 第一个人可以从任意一堆中取冰糕棍,今后每个人只能从和刚才相邻的堆中取冰糕棍。 第一个人可以从任意一堆中取冰糕棍,今后每个人只能从和刚才相同的堆中取冰糕棍(除非刚才那一堆被取完了)。 每次取完后,还可以再从另一堆中取走同样多的冰糕棍。 每次取冰糕棍的数目改为最多 3 根。 取走最后一根冰糕棍的玩家算输。 还差一条,应该写什么呢?我有三个备选方案。大家可以猜一猜,我最后用了哪个方案。 游戏双方各有一次“跳过”的机会。 游戏中有一次“跳过”的机会,任意玩家使用后该机会作废。 每次对方取完后,如果他还有别的取法,你便能要求他该轮换一种取法。 这三条补充规则都挺有意思,它们都在一个更底层的层面修改了游戏规则。我们都来分析一下。Nim 游戏里局面信息透明,不含运气成分,不会有平局产生中,所以一定有一个人拥有必胜策略。对于有的开局,先手拥有必胜策略。对于另外的开局,后手拥有必胜策略。 如果游戏双方各有一次“跳过”的机会,整个游戏跟原版其实没啥区别。对于任意一种开局,在原版中不管是先手必胜还是后手必胜,这个人在新版中仍然能够必胜。他只需要在对方选择跳过时也立即选择跳过(自己绝不主动跳过),就能把对方的跳过机会给抵消掉。一切就变回成传统的 Nim 游戏了。所以,我没有采用第一个方案。 如果整个游戏只有一次“跳过”的机会呢?情况会变得更有意思。如果一个局面在原版的 Nim 游戏中是后手必胜的,那么在新版的 Nim 游戏中,先手上来就选择跳过,从而变成后手,便能赢得胜利。 如果一个局面在原版的 Nim 游戏中是先手必胜的?让我们看看 (1, 2) 这个局面。在原版的 Nim 游戏中,它是先手必胜的。先手可以拿走后一堆中的一根冰糕棍,接下来只能是每人各拿一根,从而先手获胜。在新版的 Nim 游戏中,先手显然不会上来就用“跳过”,把必胜局面拱手让给对方;先手也不会把其中一堆取光,不然直接就输了。所以,他只能像刚才一样,把 (1, 2) 变成 (1, 1)。接下来,两人本该一人拿一根,但后手可以用一次“跳过”,从而取得最后一根。所以胜负关系也交换了。 两版 Nim 游戏的胜负关系总是颠倒的吗?不是。(1, 3) […]
今年我为北京世纪坛的数学益智游戏展贡献了不少内容。我打算在这里记录一些自己的创作、发现、收获和心得。顺便结合一下这几年的经历。这是该系列的第二篇。 两个孩子经常早晨 6 点就醒了,然后频频闯进我们卧室,给我们看他们用纸折的袜子,用乐高搭的袋熊,用水彩笔画的比萨,搞得我和孩子他妈没法睡觉。去年 5 月份左右,孩子他妈想了一个办法:在我们卧室门口放了一个纸糊的小信箱,让孩子把要给我们看的东西放信箱里。现在早晨果然能多睡一会儿了。几天后,孩子闹着说,他们想让自己的屋子门口也有个信箱。孩子他妈真又做了一个弄上去了。在信箱里放啥呢?于是我决定每天给孩子设计一些印在纸上的小活动,比如照图示折纸呀,比如看图编对话呀,比如自制两可图呀,等等。当然,还有很多我专门设计的谜题。 究竟怎样的谜题才算好的谜题,这话题就太大了。不过今天我想分享一些给孩子设计谜题时我喜欢注意的三点: 找到答案会自动带来奖励。孩子会因为成就感和外部奖励以外的原因进行解谜。 答案具备自我检查机制。即使孩子把答案做错了,他自己也能意识到。 解谜流程是非线性的。解谜的线索往往有冗余。解谜过程可以是多线并行的,不会因为卡在某一步而死掉。 学校考试里的多数单选题不满足任何一条。利用电子游戏这个媒介,这几条很容易全都实现。解开谜题后可以解锁新的内容,这就实现了第 1 条。电脑可以自动判断答案的正误,这就实现了第 2 条。第 3 条也很容易做到。比如,在一些解谜类游戏中,只要这个大关中一定数量的小关被解开了,都能进入下一大关(不要求全解开)。 但是,如果谜题限制于纸笔操作,设计难度就会很大。之前我在某小学数学杂志社当主编的时候,设计过一些满足全部三点的谜题形式,比方说下面这样的。 日晷是活动部件最少的计时工具。什么是活动部件最多的计时器?完成下面 9 个选择题,看看正确选项对应的字母,你就知道答案了。 最小的质数是多少?W.1 H.2 A.3 V.4 圆周率的符号是啥来着?U. α T. η I. σ O.π 爸爸的爸爸叫什么? U. 爷爷 H. 奶奶 I. 姥姥 A. 姥爷 我是学啥的来着?L. 考古系 P. 数学系 I. 物理系 R. 中文系 《死亡空间》重制版好玩吗?C. 别买了 A. 一般 E. 好玩 […]
今年我为北京世纪坛的数学益智游戏展贡献了不少内容。我打算在这里记录一些自己的创作、发现、收获和心得。顺便结合一下这几年的经历。这是该系列的第一篇。 有一个经典的数学小魔术。把 0 到 63 之间的数写在 6 张纸条上,其中第 1 张纸条上写着二进制表达中右起第 1 位数字为 1 的数,第 2 张纸条上写着二进制表达中右起第 2 位数字为 1 的数,第 3 张纸条上写着二进制表达中右起第 3 位数字为 1 的数,等等。给人展示 6 张纸条,问他“你的年龄出现在了哪些纸条里”。对方给出的答案就相当于告诉了你,他的年龄的二进制表达中各个地方是 0 还是 1。你就能报出他的年龄了。 今年的展会有一个主题就是过年。我们打算设计一个类似的小魔术,只不过把年龄改成生肖。由于生肖有 12 个,因此 4 张纸条就可以做到这一点。 为了让魔术能自动呈现出来,不需要工作人员表演,我们想到一个方法。把 4 张纸条换成 4 对带孔的板子,不妨把这些板子记作 1A、1B、2A、2B、3A、3B、4A、4B。墙上印有和板子一样大的海报。海报上印有十二生肖,排成一个 3 × 4 的方阵。我们事先给每个生肖分配了一个 0000 到 1111 之间的编号(所以 16 个编号只用到 12 个)。分配的时候顺序故意是乱的,这样板子上的孔更没规律,魔术效果更好。板子 1A […]
昨晚做梦,梦见了一个有趣的数学问题:有没有什么多面体,它的每个面都是凹多边形?有趣的是,接下来我梦见自己醒了过来,然后立即上网寻找答案。我梦见我查到了相关的论文,论文作者的名字中出现了很多奇怪的符号。我梦见我开始研究论文作者的名字该怎么发音。我梦见我研究了半天没有进展,于是踏上了拜访作者本人的路…… 然后就彻底醒了。然后立即上网寻找答案。废话不多说了。Branko Grünbaum 和 G. C. Shephard 在 1998 年的论文《Isohedra with Nonconvex Faces》中给出了一些例子。下图是我很喜欢的一个例子。整个多面体由12个全等的凹多边形组成。
2006 年,我在博客(当时还是 MSN Space)上发了 《什么是 P 问题、NP 问题和 NPC 问题》 一文。这是我高二搞信息学竞赛时随手写的一些东西,是我的博客中最早的文章之一。今天偶然发现,这篇现在看了恨不得重写一遍的“科普”竟仍然有比较大的阅读量。时间过得很快。《星际争霸》(StarCraft)出了续作,德国队 7 比 1 大胜东道主巴西,《学徒》(The Apprentice)里的那个家伙当了总统,非典之后竟然出了更大的疫情。现在已经是 2022 年了。这 16 年的时间里,我读了大学,出了书,娶了老婆,养了娃。如果现在的我写一篇同样话题的科普文章,我会写成什么样呢?正好,我的新书《神机妙算:一本关于算法的闲书》中有一些相关的内容。我从书里的不同章节中摘选了一些片段,整理加工了一下,弄出了下面这篇文章,或许能回答刚才的问题吧。 有一天,我和老婆去超市大采购。和往常一样,结完账之后,我们需要小心谨慎地规划把东西放进购物袋的顺序,防止东西被压坏。这并不是一件容易的事情,尤其是考虑到各个物体自身的重量和它能承受的重量之间并无必然联系。鸡蛋、牛奶非常重,但同时也很怕压;毛巾、卫生纸都很轻,但却能承受很大的压力。于是,我突然想到了这么一个问题:给定 n 个物体各自的重量和它能承受的最大重量,判断出能否把它们叠成一摞,使得所有的物体都不会被压坏(一个物体不会被压坏的意思就是,它上面的物体的总重小于等于自己能承受的最大重量)。 事实证明,这是一个非常有趣的问题——老婆听完这个问题后整日茶饭不思,晚上做梦都在念叨着自己构造的测试数据。这里,我们不妨给出一组数据供大家玩玩。假设有 A、B、C、D 四个物体,其中:物体 A 的自重为 1,最大承重为 9;物体 B 的自重为 5,最大承重为 2;物体 C 的自重为 2,最大承重为 4;物体 D 的自重为 3,最大载重为 12。在这个例子中,安全的叠放方式是唯一的,你能找出来吗? 答案:C 在最上面,其次是 B,其次是 A,最下面是 D。注意,在这个最优方案中,最上面的物体既不是自身重量最小的,也不是承重极限最小的,而是自身重量与承重极限之和最小的。事实上,最优方案中的四个物体就是按照这个和的大小排列的!对于某种叠放方案中的某一个物体,不妨把它的最大载重减去实际载重的结果叫作它的安全系数。我们可以证明,这种按自身重量与载重能力之和排序的叠放策略可以让最危险的物体尽可能安全,也就是让最小的那个安全系数达到最大。如果此时所有物体的安全系数都是非负数,那么我们就相当于有了一种满足要求的叠放方案;如果此时仍然存在负的安全系数,那么我们就永远找不到让所有物体都安全的叠放方案了。 假设在某种叠放方案中,有两个相邻的物体,上面那个物体的自身重量和最大载重分别为 W1 和 P1,下面那个物体的自身重量和最大载重分别为 W2 和 P2。再假设它俩之上的所有物体的重量之和是 W,这是这两个物体都要承担的重量。如果 […]
环面多面体,即亏格为 1 的多面体,直观地说就是有 1 个洞的多面体。下图中三个多面体里分别有 0 个洞、1 个洞和 2 个洞。第二个多面体就是环面多面体。最近,我在研究一些和环面多面体相关的话题,在这里和大家分享一些我的发现。 由正多边形构成的环面多面体 正四面体、正六面体、正八面体、正十二面体、正二十面体、侧面均为正方形的正棱柱、侧面均为等边三角形的正棱锥、足球或者 C60 所对应的多面体等等,都是由正多边形构成的多面体。 有没有什么环面多面体也是由正多边形构成的呢?一个容易想到的做法就是,把 8 个正方体摆成一个“口”字形。这样做是不行的。正方体拼接起来后,原来的很多面会因为共面的原因合成了更大的面。站在整个多面体的角度来讲,它的各个面就不再是正多边形了。 然而,如果我们用下面这样的方法把正方体拼接起来,就漂亮地绕开了这个问题。 做完上面这个图之后,我才发现这个图是有毛病的。作为一个完美主义者,我又重新做了一个正确的图,如下图所示。你能看出这两个图的区别吗? 答案是,前一个图里,相邻小正方体的公共面,即那些贴合在一起的面,仍然留在了图中;作为一个真正的多面体,它的内部是不该有这些面的。所以,我才做了后面这个图。它里面就是空的了。 利用拼接的方法,还能做出更多满足要求的环面多面体。例如,将 6 个正六棱柱(侧面均为正方形)按照下图的方式拼成一圈,也形成了一个满足要求的图形。 你可以利用这种方式,构造出一些更大胆、更疯狂的图形。比方说,像下图这样,把这些正六棱柱连成一个纽结。 呃……这还算环面多面体吗?换句话说,这还算只有 1 个洞的多面体吗?是的,还算。一个多面体有几个洞,就意味着为了保证它仍然连通,最多能切几刀(每一刀都要切出一个完整的断面)。这是对洞的个数的一种更有效的刻画方式。上图中,只切一刀,整个图形有可能是仍然连通的(比如把链条中的某处切断),也有可能被分成两部分(比如像用削皮刀一样削下表面的一块皮)。但是,如果切两刀,整个图形必然不再连通。这说明,该多面体确实属于只有 1 个洞的多面体。它是环面多面体。 想要看更帅的吗?这是用 8 个正十二面体拼成的环面多面体。显然,它也满足,每个面都是正多边形。 构造所有面均为正多边形的环面多面体还有很多别的截然不同的方式。下面这一对凸多面体具有很有趣的性质: 它们的每个面都是正多边形 它们的高度相同(都是棱长的 √2 倍) 它们的顶面完全相同,底面也完全相同 重叠放置后,前者完全位于后者内部 我们就能在后者当中挖出一个形如前者的孔。这就又得到了一个满足要求的环面多面体。 下面是一个更加复杂的例子。中间的孔是一个侧立着的正十棱柱。 Bonnie Stewart 对这样的多面体进行了非常细致的研究,并写成了 Adventures […]
我正在餐桌前吃早餐。餐桌上有一张圆形的大饼,有一个方形的蛋糕,还有一个甜甜圈。我依次思考了下面三个问题。你能帮我想出它们的答案吗? 3 刀切一张圆形的大饼,最多能把它分成多少块?或者说,3 条直线最多能把一个圆盘分成多少个区域? 4 刀切一个方形的蛋糕,最多能把它分成多少块?或者说,4 个平面最多能把一个正方体分成多少个区域? 3 刀切一个甜甜圈,最多能把它分成多少块?或者说,3 个平面最多能把一个(实心的)环面分成多少个区域? 提示:上一个问题的答案总会为下一个问题提供线索。 3 刀切一张圆形的大饼,最多能把它分成多少块?或者说,3 条直线最多能把一个圆形分成多少个区域? 这是一个经典的小学问题。答案是 7 块。如图所示,事实上,当直线数分别为 1, 2, 3, 4, 5, …时,最多产生的区域数对应地是 2, 4, 7, 11, 16, …。这背后的规律是:1 条直线能把圆盘分成 2 个区域;第 2, 3, 4, 5, …条直线,则会让区域数增加 2, 3, 4, 5, …个。 1 条直线最多能把圆盘分成 2 个区域,这事儿很显然。为什么第 n 条直线会让区域数增加 n 呢?这背后有一个非常简单的解释。前 n − 1 条直线会与第 […]
大家应该听说过 9 枚硬币的问题吧。9 枚硬币当中有 8 枚是真币,有 1 枚是假币。所有的真币重量都相同,假币的重量则稍重一些。怎样利用一架天平两次就找出哪一枚硬币是假币?方法是,先把 9 枚硬币分成三组,每组各 3 枚硬币。然后,把第一组放在天平左边,把第二组放在天平右边。如果天平向左倾斜,说明假币在第一组里;如果天平向右倾斜,说明假币在第二组里;如果天平平衡,说明假币在剩下的第三组里。现在,假币的嫌疑范围就被缩小到 3 枚硬币之中了。选择其中 2 枚硬币分放在天平左右两侧。类似地,如果天平左倾,就说明左边那枚硬币是假的;如果天平右倾,就说明右边那枚硬币是假的;如果天平平衡,就说明没放上去的那枚硬币是假的。 9 硬币问题实在是太经典了,你甚至能在人教版小学五年级下册的课本里看到它。9 硬币问题还衍生出了很多变形,其中最著名的当属 12 硬币问题了:有 12 枚硬币,其中一枚是假币,但我们不知道假币是更重一些还是更轻一些;请利用一架天平三次找出哪一枚硬币是假币,并判断出它比真币更重还是更轻。12 硬币问题的经典程度恐怕不亚于 9 硬币问题。早在 20 世纪 40 年代,12 硬币问题就已经吸引了一大批数学家和数学爱好者,甚至有人建议把这个问题扔到德国去,以削弱德国人在二战中的战斗力。如果你想知道答案,可以在网上找找,应该很容易找到。我们今天就不讨论了。 今天,我们真正想聊的其实是这个问题的另外一种比较少见的变形:仍然是要在 9 枚硬币当中寻找 1 枚假币,仍然假设假币的重量要稍重一些,仍然只能使用天平两次;但是这一次,你所使用的是一种“天平机”,它不会立即告诉你现在是哪边重哪边轻,而是在你两次称完后把这两次的结果一并打印给你。这下,你就没法根据天平的反馈结果随机应变了,必须事先把每次怎么放硬币全规划好。那么,你该怎么办?在本文后面的内容中,均已知假币比真币更重,直至另有说明。 答案并不复杂。你的第一步应该和刚才一样,仍然是把 9 枚硬币均分成三组,把第一组放在天平左边,把第二组放在天平右边。妙就妙在第二步。我们的原计划是,哪一组里有假币,就在哪一组里选出 2 枚硬币分放在天平两侧。但是,由于没有及时的反馈,我们根本就不知道哪一组里有假币,这该怎么办呢?其实,我们根本不用管哪一组里有假币,从每一组里都选 2 枚硬币放上去就行了,反正另外两组硬币都是真的,放上去了不会有什么影响。这有一点“并行运算”的意思。举例来说,如果第一步放在天平左右两侧的硬币编号分别是 1、2、3 和 4、5、6,那么第二步放在天平左右两侧的硬币编号就应该是 1、4、7 和 2、5、8。如果事后天平告诉我,第一次称完左边更重一些,那么我就知道了假币一定在 1、2、3 当中,于是第二次左边更重就说明 1 是假币,第二次右边更重就说明 2 是假币,第二次天平平衡就说明 […]
下面这个趣题出自 Using your Head is Permitted 谜题站 2016 年 10 月的题目:能否把一个凸四边形分成若干个凹四边形? 答案是否定的。我们给出一个非常漂亮的证明。在下面的文字中,我们用“优角”一词来表示一个大于 180 度小于 360 度的角。 假设某个凸四边形被分成了若干个凹四边形。容易看出,每个凹四边形的内角中都有且仅有一个优角(如果没有优角,它就不是凹四边形;如果有两个或更多的优角,就与四边形内角和为 360 度矛盾)。 现在,让我们把每个凹四边形的那个优角顶点涂成蓝色。容易看出,每个蓝色顶点只能成为一个凹四边形的一个优角顶点(否则汇聚于该点处的角度之和会超过 360 度)。这意味着,每个蓝色顶点都唯一地对应一个凹四边形。如果图中的蓝色顶点一共有 n 个,那么凹四边形也一共有 n 个。 我们用两种不同的方式来统计所有凹四边形的所有内角的度数之和。汇集在每个蓝色顶点的内角之和都是 360° ,汇集在原四边形四个顶点处的内角之和也是一个 360° ,所以我们已经有至少 n × 360° + 360° 了。考虑到其他没涂成蓝色的顶点处还有很多角,因此上面这个数目实际上还会更多。但是,我们一共有 n 个凹四边形,每个凹四边形的内角之和是 360° ,因此所有凹四边形的所有内角之和显然应该是 n × 360° 。这个矛盾说明,我们无法把一个凸四边形分成若干个凹四边形。
随着常数 m 和 n 的变化,参数方程 x = sin(m · t), y = sin(n · t) 将会画出一系列漂亮的曲线。法国物理学家 Jules Antoine Lissajous 曾在 1857 年研究过这类曲线,因此人们把它叫做 Lissajous 曲线。我在 reddit 上看到了一个 Lissajous 曲线的动画演示,觉得看起来确实非常爽;但那个动画里没有解释曲线的生成方法,很多细节也有让人不太满意的地方,于是决定自己制作一个。这个动画展示的是 m = 13, n = 18 时的 Lissajous 曲线。