最近上算法课,老师讲了一个有趣的证明题。
平面上一个有n个点的有限点集A。具有如下性质:任意两个点x,y所决定的直线上都能找到第三个点z。试证明A中的所有点在同一直线上。
对于证明题来说,最常用而系统的方法无非就两种:归纳法和反证法。其他的诸如综合法和分析法都与具体问题关系较大。如果解决证明题一时没有思路,这两种方法将是不错的选择。下面将尝试用这两种方法解决这个题目。
一,归纳法。
相信学过高中数学的人,没有人不知道这个大名鼎鼎,而又简单有效的证明方法。这里就不再赘述。下面给出一个证明过程。
(1)当|A|≤4时,显然是成立的;(|A|表示集合中点的数量)
(2)假设当|A|=k时,有上述结论成立,即所有点在同一直线上;
(3)那么只需要证明当|A|=k+1时,该结论也成立;
取A的子集A’,|A'|=k,令剩下的一个点为x。根据(2)有,A'中所有点在同一直线上。取A'中点y,那么直线xy上必然存在另外一点z。而根据A'定 义,z只能在A'中。由于两点决定一条直线,所以A中所有点在同一直线上。
这个看似完美的证明有没有问题呢?楼主刚开始也没反应过来。其实这个过程有个很大的BUG。现在我们看看问题出在哪里。
大家都知道,第三步的归纳过程需要用到第二步的假设,这也是数学归纳法最难的一部分。这里,我们假设|A|=k时,所有点在同一直线上。于是不加思索地直接把结论用到了第三步。我们忽略了题目的假设条件:任意两个点x,y所决定的直线上都能找到第三个点z。我们把第二步写完整应该是:当|A|=k时,如果A中任意两个点x,y所决定的直线上都能找到第三个点z,那么所有点在同一直线上。现在问题显而易见了,A满足这个性质,不代表A'满足这个性质,只有先证明A'也具有该性质上述证明才是成立的。虽然对于|A|≥4来说,我们能猜到那是正确的,但是证明它却很不容易。
接下来,我们试试反证法来证明。
二,反证法。
实际上,看到这个题目,很多人都会想到反证法。因为这是证明一个“所有”的问题。那么,具体又该如何做呢?
首先,我们假设A中的点不在同一条直线上。那么对于A中的某直线L,存在点d不再该直线上。根据A满足的性质,必然有三个点在L上,假设为a、b、c。
我们先来证明一个性质。
过d点,作垂线到L。显然,a、b、c中必有两点在同一侧,假设为a和b。那么,如图所示,有distance(d,L)>distance(b,Lad)。即,假如存在某点不在直线L上,我们总能找到另外一点,使得该点到另一条直线的垂直距离小于某点到直线L的垂直距离。
有了这个性质,证明基本已经完成了。由于A是一个有限点集,而且不是所有点都在一条直线上(假设)。那么显然,点到直线的距离必然存在着一个非0最小值,即存在某点和某直线使得点到直线的距离最短。这与上面的性质显然是矛盾的。因为我们一定能找到另一个更小的非0值。
证毕。