IMO2016 趣题:Geoff 的青蛙

2016 年 IMO 的第 6 题(也就是第二天比赛的第 3 题)非常有趣,这恐怕算得上是近十年来 IMO 的所有题目中最有趣的题目之一。平面上有 n ≥ 2 条线段,每两条线段都有一个交点,并且任意三条线段都不交于同一点。 Geoff 打算在每条线段的其中一个端点处放置一只青蛙,并让每只青蛙都朝向它所在线段的另一个端点。然后, Geoff 将会拍 n – 1 次手。每次拍手时,每只青蛙都立即向前跳到它所在线段的下一个交点处(青蛙们在跳跃过程中始终不会改变方向)。 Geoff 希望巧妙地安排初始时放置青蛙的方法,使得在整个过程中,任意两只青蛙都不会同时到达某个相同的交点。这个题目有两个小问。

  1. 证明:当 n 为奇数时, Geoff 一定有办法实现他的要求。
  2. 证明:当 n 为偶数时, Geoff 永远无法实现他的要求。

Read more…

捡石子游戏、 Wythoff 数表和一切的 Fibonacci 数列

让我们来玩一个游戏。把某个国际象棋棋子放在棋盘上,两人遵循棋子的走法,轮流移动棋子,但只能将棋子往左方、下方或者左下方移动。谁先将棋子移动到棋盘的最左下角,谁就获胜。如果把棋子放在如图所示的位置,那么你愿意先走还是后走?显然,答案与我们放的是什么棋子有关。

这个游戏对于兵来说是没有意义的。在如图所示的地方放马或者放象,不管怎样都无法把它移动到棋盘的最左下角,所以我们也就不分析了。因此,我们只需要研究王、后、车三种情况。

Read more…

Keller 猜想与 12 维空间中的神构造

在各种令人惊讶的数学事实当中,我最喜欢的类型之一便是,某个数学命题在二维空间、三维空间甚至四维空间当中都是成立的,但偏偏到了某个维度时,命题就不成立了。 Keller 猜想就是一个这样的例子。

同样大小的正方形平铺整个平面(比如像下图那样),则一定存在某些边与边完全贴合的相邻正方形。

类似地,同样大小的正方体平铺整个空间(比如像下图那样),则一定存在某些面与面完全贴合的相邻正方体。

1930 年, Ott-Heinrich Keller 猜测,或许这一点对于更高维度的空间都是成立的。也就是说, Ott-Heinrich Keller 猜测,对于任意正整数 n ≥ 2 都有,同样大小的 n 维立方体平铺整个 n 维空间,则一定有两个面与面完全贴合的相邻 n 维立方体。这就是著名的 Keller 猜想。

1940 年, Oskar Perron 证明了,当 n = 2, 3, 4, 5, 6 时, Keller 猜想确实是正确的。一切似乎都在正轨上。然而,到了 1992 年的时候,事情出现了转折: Jeffrey Lagarias 和 Peter Shor 构造了一个 n = 12 时的反例,从而推翻了 Keller 猜想。让我们来看一看 Lagarias 和 Shor 的神构造吧。为了方便起见,下面我们直接用“立方体”一词指代 n 维的广义立方体,“立方体的面”则代表 n 维立方体的 n – 1 维面。

Read more…

WOM 编码与一次写入型存储器的重复使用

计算机历史上,很多存储器的写入操作都是一次性的。 Wikipedia 的 write once read many 词条里提到了两个最经典的例子,一个是大家熟悉的 CD-R 和 DVD-R ,另一个则是更早的打孔卡片和打孔纸带。在介绍后者时,文章里说:“虽然第一次打孔之后,没有孔的区域还能继续打孔,但这么做几乎没有任何实际用处。”因此,打孔卡片和打孔纸带通常也被看成是只能写入一次的存储设备。

事实上真的是这样吗? 1982 年, Ronald Rivest 和 Adi Shamir 发表了一篇题为《怎样重复使用一次写入型存储器》(How to Reuse a “Write-Once” Memory)的论文,提出了一个很有意思的想法。大家有觉得 Ronald Rivest 和 Adi Shamir 这两个人名都很眼熟吗?没错,这两个人之前曾经和 Leonard Adleman 一道,共同建立了 RSA 公钥加密系统。其中, Ronald Rivest 就是 RSA 中的那个 R , Adi Shamir 就是 RSA 中的那个 S 。

在这篇论文的开头, Ronald Rivest 和 Adi Shamir 举了一个非常简单的例子。假设初始时存储器里的所有 bit 全是 0 。存储器的写入操作是单向的,它只能把 0 变成 1 ,却不能把 1 变成 0 。我们可以把存储器里的每 3 个 bit 分为一组,每一组都只表达 2 个 bit 的值,其中 000 和 111 都表示 00 , 100 和 011 都表示 01 , 010 和 101 都表示 10 , 001 和 110 都表示 11 。好了,假设某一天,你想用这 3 个 bit 表示出 01 ,你就可以把这 3 个 bit 从 000 改为 100 ;假设过了几天,你想再用这 3 个 bit 表示出 10 ,你就可以把这 3 个 bit 从 100 改为 101 。事实上,容易验证,对于 {00, 01, 10, 11} 中的任意两个不同的元素 a 、 b ,我们都能找到两个 3 位 01 串,使得前者表示的是 a ,后者表示的是 b ,并且前者能仅仅通过变 0 为 1 而得到后者。因此,每组里的 bit 都能使用两遍,整个存储器也就具备了“写完还能再改一次”的功能。

不可思议的是,两次表达出 {00, 01, 10, 11} 中的元素,其信息量足足有 4 个 bit ,这却只用 3 个 bit 的空间就解决了。这乍看上去似乎有些矛盾,但仔细一想你就会发现,这并没有什么问题。在写第二遍数据的时候,我们会把第一遍数据抹掉,因此总的信息量不能按照 4 个 bit 来算。利用这种技术,我们便能在 300KB 的一次写入型存储器里写入 200 KB 的内容,再把这 200KB 的内容改写成另外 200KB 的内容。这听上去似乎是神乎其神的“黑科技”,然而原理却异常简单。

Read more…

趣题:不等式背后的直观意义

有时,为了说明某个式子始终成立,我们会为它构造一个情境。例如,为了说明

C(m, 0) · C(w, r) + C(m, 1) · C(w, r – 1) + … + C(m, r) · C(w, 0) = C(m + w, r)

始终成立,只需要注意到,等号的左边和右边计算的都是同一个东西:假如一个班上有 m 个男生 w 个女生,从中选出 r 个人有多少种方案。等号左边的计算方式是,分别计算 0 男 r 女、 1 男 r – 1 女、 2 男 r – 2 女等 r + 1 种情况的方案数,然后把它们加起来。等号右边则是直接算出了从这 m + w 个人中选出 r 个人的方案数。两种算法所得的答案应该是相等的。

现在,请你构造一个情境,来说明不等式

(1 – pm)n + (1 – qn)m ≥ 1

总成立,其中 m 、 n 是任意正整数, p 、 q 是任意正实数,并且满足 p + q ≤ 1 。

Read more…