鸽巢原理以及Ramsey定理详解

简单形式:

[plain]  view plain  copy
 print ?
  1. 定理:如果有n+1个物体被放进n个盒子,那么至少有一个和紫包含两个或者更多的物体。  

 

定理非常的简单,但是真正用好这个定理却需要一定的功底。

eg1.以为国际象棋大师有11周的时间备战一场锦标赛,他决定每天至少下一盘国际象棋,但是为了不使自己过于疲劳,他还决定在每周不能下超过12盘。证明存在连续若干天,期间这位大师恰好下了21盘棋。

[plain]  view plain  copy
 print ?
  1. 证明:  
  2.   
  3. 鸽巢原理的应用最终就是要找到物体和盒子,并且保证物体的数量要比盒子的数量多。  
  4.   
  5. 令a1是第一天所下的盘数,a2是第一天和第二天下所下的盘数,以此类推,从而当想知道第n+1到第m天之间的盘数,只需要用am-an就能求出来了。(这里你是否看到了树状数组的影子)  
  6.   
  7. 所以 1<=a1<=a2<=........<=a77<=132  
  8.   
  9. 所以22<=a1+21<=a2+21<=.......<=a77+21<=153  
  10.   
  11. 于是这154个数在1到153之间,运用鸽巢原理,必然存在ai = aj+21。  
  12.   
  13. 即 ai - aj = 21,从第 j+1 天到第 i 天共下了21盘棋。  

 

加强形式(可以转换成平均原理):

[plain]  view plain  copy
 print ?
  1. 令q1,q2.......qn为正整数。如果将  
  2.   
  3.        q1+q2+......+qn+n-1  
  4.   
  5. 个物体放入n个盒子,那么,或者第一个盒子至少含有q1个物体,或者第二个盒子至少含有q2个物体,.............或者第n个盒子至少含有qn个物体。  

eg2.证明每个由n^2+1的实数构成的序列a1,a2,............a(n^2+1)或者含有长度为n+1的递增子序列或者含有长度为n+1的递减子序列。

这里的证明比较复杂,就不给出了

 

Ramsey定理:

一个比较流行的理解是:

在6个(或更多)的人中,或者有3个人,他们中的每两个人都相互认识,或者有3个人,他们没两个人都相互不认识。

推广为较一般的形式:

[plain]  view plain  copy
 print ?
  1. Kp -->Km, Kn  
  2.   
  3. 即表示:对于给定的m和n,存在一个整数p,使得如果Kp的边数被涂成红色或者是蓝色,那么或者有一个红色的Km,或者有一个蓝色的Kn。  

平凡Ramsey数:

[plain]  view plain  copy
 print ?
  1. r(2, n) = r(n ,2) = n  


一些非平凡Ramsey数:

[plain]  view plain  copy
 print ?
  1. r(3, 3) = 6  
  2.   
  3. r(3, 4) = 9  
  4.   
  5. r(3, 5) = 14  
  6.   
  7. r(3, 6) = 18  
  8.   
  9. r(3, 7) = 23  
  10.   
  11. r(3, 8) = 28  
  12.   
  13. r(3, 9) = 36  
  14.   
  15. 40<=r(3, 10)<=43  
  16.   
  17. r(4,4) = 18  
  18.   
  19. r(4,5) = 25  
  20.   
  21. 43<=r(5,5)<=55  


 

在推广为更为一般的形式,我们把其中的点对看成是有t个元素构成的子集,当t 等于1 的时候,即是上面的那种形式:

                   令K(t,n)表示n个元素的集合众所有的t 个元素的子集的集合。

Ramsey定理:

[plain]  view plain  copy
 print ?
  1. 给定一个整数t>=2及整数q1,q2,.......qk>=t ,存在一个整数p,使得  
  2.   
  3. K(t, n) --> K(t, q1)m, K(t, q2), ...........K(t, qk)  

并且

r1(q1, q2, .........qk) = q1+q2+.........+qk-k+1 (鸽巢原理的加强形式)

 

 

下面有几道很有意思的题:

1.用鸽巢原理证明,有理数m/n展开的十进制小数最终都是要有循环的。例如:

                     34 478/99 900 = 0.345 125 125 125 ............

[plain]  view plain  copy
 print ?
  1. 证明:这里我没有想出用鸽巢原理的解法,但是想到了另一个解法,如果有读者想到了的话,欢迎留言讨论。  
  2.   
  3. 首先这里m/n肯定是不能整除的,不能整除等价于当我们把m和n进行约分后,两者必然互质,即两者的最大公约数为1,即可以写成:  
  4.   
  5.                am + bn = 1  
  6.   
  7. 说明m/n最后肯定可以表示为 1/n 的形式,又因为 n 的因子不存在2和5(除法时,分子会乘以10,所以就约掉了2和5)。所以必然有:  
  8.   
  9.              a*10^x + bn = 1  
  10.   
  11. 这里我们找到了一个循环,从而证明了有理数m/n展开的十进制小数最终是要有循环的。   


 

 

2.一个屋子内有10个人,他们当中没有人超过60岁,但是又至少不低于1岁。证明,总是能找出两组人,各组人的年龄和相同的。

[plain]  view plain  copy
 print ?
  1. 证明:  
  2.   
  3. 1<=a1<=a2<..................<=a1+a2<=..........<=a1+a2+a3+....a10<=600  
  4.   
  5. 共有1023种组合,所以必然存在。  


总结:

对于鸽巢原理的核心就是:找到“盒子”以及“物品”,并且保证物品的“数量”要多于“盒子”

你可能感兴趣的:(acm,知识点)