原理概述:
有n只鴿子和m個鴿洞,所有鴿子都住在鴿洞里,如果n>m,那么至少有二只鴿子必須住在同一鴿洞里。
函數觀點:
把鴿子看成是定義域A中元素ai,鴿洞看成是值域B中的元素bj,鴿子住鴿洞作為函數關系。
鴿洞原理:
設f是從有限集A到有限集B的函數,若|A|>|B|,則必有a1,a2∈A,a1≠a2,使f(a1)=f(a2)=b∈Bf 包含於B(Bf是象域)。
反證:若對任意a1,a2∈A,a1≠a2,f(a1)≠f(a2),|A|=|Bf|≤|B|與|A|>|B|矛盾
注:
鴿洞原理本質上是對一個非一對一函數的充分性判別。
這個原理看上去容易理解,且有廣泛的應用。
例1:在n2+1個不同整數的任意排列中,證明一定存在長為n+1的上升子序列或下降子序列。
證明:
設此序列為:a1,a2,…,ak,…,從ak開始上升子序列長度為xk,下降子序列長度為yk,每一個ak(k=1,2,…,n2+1)都對應了(xk,yk)。
若不存在長為n+1的上升或下降子序列,那么xk ≤n,yk≤n,形如(xk,yk)的不同點對至多有n2個,而ak有n2+1個,必有ai,aj(1≤i<j≤n+1)同時對應(xi,yi)=(xj,yj)。
由於ai≠aj,若ai<aj,則xi至少比xj大1,若ai>aj,則yi至少比yj大1,與(xi,yj)=(xj,yj)矛盾。
例2: 132個球放入77個盒子內,每盒至少放一球,求證:一定有21個球放在相鄰的某幾只盒子里。
證明:
設第k個盒子里放的球為bk,得到b1,b2,…,b77,按題意,欲尋找i和j,i>j≥0,使bj+1+bj+2+…+bi=21,即完成證明。
設ak=,得到a1,a2,…,a77,顯然,{ak}是嚴格單調上升的,ai≠aj (i≠
設 Ck=,得到C1,C2,…,C77,{Ck}也是嚴格單調上升的,Ci≠Cj (i≠j),且C77=153,Ci=ai+21。
{ak}與{Ck}合在一起共有154個,但只能在1~153中取值,由鴿洞原理,必有二個相同,且不會同是ak中的,也不會同是Ck中的,不妨ai=Cj=aj+21,ai-aj=21,即,得到bj+1 +bj+2+…+bi=21。
例3:
設x1,x2,…,xn是任意排列的任意整數,證明其中存在連續的若干個數,它們之和是n的倍數。
證明: 設ai=
若ai中有n的倍數,則命題成立
若ai中沒有n的倍數,由n除ai的余數只能在1~n-1中取
以ai(i=1,2,…,n)作鴿子,1~n-1作鴿洞,ai,aj,使ai≡aj(modn)(i>j),則 n|(ai-aj), 即xj+1+xj+2+…+xi是n的倍數。
摘錄自百度文庫:鴿子洞原理