下面这个精彩的问题来自于刚刚结束的 IMO 2011 中的第 2 题:
设 S 是平面上包含至少两个点的一个有限点集,其中没有三点在同一条直线上。所谓一个“风车”是指这样一个过程:从经过 S 中单独一点 P 的一条直线 l 开始,以 P 为旋转中心顺时针旋转,直至首次遇到 S 中的另一点,记为点 Q 。接着这条直线以 Q 为新的旋转中心顺时针旋转,直到再次遇到 S 中的某一点,这样的过程无限持续下去。
证明:可以适当选取 S 中的一点 P ,以及过 P 的一条直线 l ,使得由此产生的“风车”将 S 中的每一点都无限多次用作旋转中心。
注意,由于两点确定的直线只有有限多条,因此直线无限旋转下去,必然会出现和以前某个时刻相同的状态,于是产生循环。另外,由于直线旋转的过程是可逆的,我们不必担心最终产生的是一个 ρ 字形的循环。因此,我们实际上只需要证明,存在这样一条初始直线,它可以碰到所有的点。
我用 Mathematica 写了一个程序,做了一些直观的动画。如图所示的由 6 个点构成的点集,适当地选择初始直线就能遍历所有的点,但错误的选择将会导致有一些点永远也碰不到。
IMO 2011 赛后统计资料显示,这道漂亮的问题竟然是六道题中第二难的题(第一难的题是最后一道)。 polymath blog 组织了 mini-polymath3 活动,邀请众人一同讨论这道题的解法。活动一开始,便引来各路数学高人献计献策,提出了很多有趣的思路和猜想;第 74 分钟,终于有人给出了正确的解法。果然不出所料,神题就该有神解,这道题有一个异常简单巧妙的证明方法。
找一条直线,这条直线两侧的点数一样多(最多相差一个)。下面我们证明,这条直线就满足要求。容易看出,在直线的旋转过程中,直线两侧的点数之差始终不变。因此,这条直线转了 180 度后,直线一定回到了初始的位置(或者它旁边一个点的位置)。但此时,原来在直线左侧的点现在全部跑到了直线右侧,原来在直线右侧的点现在全部跑到了直线左侧。这些点当然是不能瞬移到直线另一侧的,要想跑到直线的另一侧,必须要先穿过直线才行。由此可见,所有点都被直线碰到过了。
沙发。
难道是沙发?
这个证明真是奇妙 虽然初看怀疑严谨性 看完的确感觉很完美
Matrix67你好,我前些日子给你的邮件收到了吗?呵呵,好久不见你更新文章了!
55555没抢到沙发………………
先说一句终于更新了,不易……而且这个解好猛,充分的利用了不变量。
真是simple and beautiful 的证明啊……
ORZ啊
终于更新了,都不知道去哪里了?
神题就该有神解
很直观的不变式,很棒的证明。
能不能公布一下mathematica的程序呢?哈哈
厲害
根本不需要均匀分布在两侧(最多差一个点),只要所有点不是全在一侧就足矣。
我想错了,还是得均匀分布在两侧
证明太神奇了!居然可以这样!话说考场上的最优解是什么?
终于更新了,好久了哦
有人当场做出这种证明吗- -?
今年的第二、第三名都错在这题上。
话说想知道那位冠军菇凉是怎么解的。
最后一题貌似只有6个人解出来……太那神马了。。。
为什么容易看出容易看出,在直线的旋转过程中,直线两侧的点数之差始终不变???
Orz
百度数学吧当时也有人给出了正解…
真是神解啊!我当时想到了这个但是没注意到在直线的旋转过程中,直线两侧的点数之差始终不变~~
ym …
这个题目如果允许使用计算机就比较简单了,我写了个类似M牛的程序模拟直线的运行,不久就观察到直线两侧的点数不变这样一个事实,再观察可行的初始点在点集中的分布(不行的都在边上),然后注意到可行解中各点碰到直线的顺序,这样直线的构造就显然了。
如果没有直观的可视化模拟,全凭脑子想,恐怕发现规律是比较困难的。刚看到题,我就想不明白点是如何“穿过”直线的,被迫动用了计算机……
今年唯一满分的那个德国妹子
参加五届IMO 4金1银 目前为名人堂第一位..
居然还是妹子..
数学妹子 geek妹子神马的最有爱的
嗯……“直线一定回到了初始的位置”是怎么证明的?
求mathematica程序。
每天都有新惊喜。
“由于直线旋转的过程是可逆的,我们不必担心最终产生的是一个 ρ 字形的循环”
今天学到此关系。
同问27楼:“直线一定回到了初始的位置”是怎么证明的?
为什么不能一旋转就发散出去回不来了呢?
30L,我的意思是“选择两边点数至多相差为1”这一条件有什么用……
真是神作
数学真的很神奇
恩 很好
恩 真是不错
因为经过每个点的直线必定存在一条能把平面上的点分成个数相等或相差一得直线 所以 这样做一定可以
这人气还真不少啊
31楼,如果点数相差大于一,就可能会漏掉一些点啊,这些点刚好位于初始位置和旋转180后的结束位置之间。
31楼,因为是顺时针转,如果选择的两侧点数相差大于1的话,就有可能漏掉一些点,这些点刚好位于直线初始位置和旋转180后的位置之间。
问题的关键还是注意到直线不管怎么转,要么先碰到左边的点,要么先碰右边的,一旦碰到,该侧点数减一,同时,被释放掉的原旋转点成为该侧的新的点。所以怎么转两侧点数差都一样。因为是单方向顺时针旋转,为了不漏掉点,最差的情况必须是旋转180后的直线是在初始旋转点旁边最近的那个点上的,所以选择了证明中那个位置。
看这题目很快想出了一种解法,不过证明貌似不是很显然。跟本文解法还差了些……
我的解法:
先想了下在什么情况下直线碰不到点: 一个多边形,直线蹭着外轮廓转,里边的点碰不到。那么,如果线是从里边走的呢?结果貌似是,线永远不会转到外轮廓循环中。所以,我的解法是……
先建个坐标系,找出x最大的点,可能有一个或两个,既然顺时针转动,两个的话就选下边的吧。然后直线选y轴的平行线,开始转动,结果最外边一层被遍历。
把最外边一层扔掉,剩下的重复上述过程。
到最后,所有的点都被分层,每层是一个凸多边形。最里边一层可能有一个点,两个点,或是有多个点的凸多边形。不管怎样,从最内层选一个点和一条直线,则一定可以遍历所有点。
尚未证明,不过看起来应该是对的……
39楼:嗯,谢谢,其实我是想知道怎么利用这个证明全都能碰到,即证明直线旋转半周后还在原位。
还能说什么呢!
我突然想起了某年一道中考题:
“证明一定能找到一条直线把任意形状的平面分成面积相等的两部分。”
这道题很简单,随便画条直线使得左边面积比右边的大,然后平移使得左边面积比右边小,那么在平移过程中一定会存在一个时刻使得直线平分这图形。
虽然这道题比竞赛题要简单很多,但是不能不说没有异曲同工之妙啊!用最简单的平移、旋转解决一道看似复杂的图论题目。
40楼:
注意这是直线不是线段啊,你怎么可以把最外层去掉?
http://zh.wikipedia.org/wiki/Matrix67
不知道这个是谁写的…
每次更新的博文都很有趣 哈哈~
41L。抓住旋转中直线两侧点数差不变这个条件就行,如果初始点直线两侧点数相同,转180后肯定还是在这点,才是两侧点数差不变,对吧?如果初始点直线两侧点数差一,转180后直线会挪一个位置到旁边那个点,还是保持左右点数差一。
这个早看过了。。。
哈哈好像是有这么一条直线
excellent!
IMO竟然有秒杀解
想问一下是否可以扩展. 即两边的点数差最多可以是多少.和点的总数和分布什么关系.
或者能证明只有差1或0才是唯一解.
我原来以为会有很强的新的数学工具来证明,看了描述之后很失望
40楼:我在纸上画了一下你的做法,一直想找到反例,但没有成功,我想文中指出的做法也许更加严格,至少从理解上来看是更加严格,我明白你的意思,我在想也许你找到的是一个更大的解空间。
这个之前就看过了,哈哈
讚哦!