1. 程式人生 > >組合數學之四 —— 鴿巢原理

組合數學之四 —— 鴿巢原理

嘿,大家統統圍過來,給你們看一個很棒的東西,那是一種很酷很辣很炫很Top的東西:

基本知識

如果要把n+1個物品放進n個盒子中,那麼至少有一個盒子包含兩個或更多東西

這個就是鴿巢原理,本文完

原理很簡單,我們提出兩個推論:

  • 如果將n個物體放入n個盒子並且沒有一個盒子是空的,那麼每個盒子恰好有一個物體
  • 如果將n個物體放入n個盒子中並且沒有一個盒子被放入多於一個的物體,那麼每個盒子裡有一個物體

看一下例題吧(從題中參透精華):

∞ 例一

給定m個整數a1,a2,a3,…,am,存在連續的一段區間,使得區間和能被m整除

首先,看到區間和就要條件反射般想到用字首和

處理
能被m整除這個條件,就可以轉化成“區間和%m=0”
那麼字首和就用該有m+1個值:
0
a1
a1+a2
a1+a2+a3

a1+a2+…+am

我們把字首和%m後,會有一個很顯然但很玄妙的細節:
%m後的數值的範圍一定在:0~m-1(一共m種值)
這就說明,這m+1種字首和中,有m種不同的數值,那麼一定有兩個字首和%m後的值相等
因此要求的區間一定是在這兩個相等的字首和之間的數列

∞ 例二

一位國際象棋大師有11周的時間備戰一場錦標賽,ta決定每天至少下一盤棋
為了不使自己過於疲勞,ta還決定每週不能下超過12盤棋
證明存在連續若干天,期間這位大師恰好下了21盤棋

設ai是在第一天所下的盤數,
因為每天至少下一盤棋,故數列序a[1],a[2],a[3],…,a[77]一定是一個嚴格遞增序列
又因為任意一週最多下12盤棋,所以a[77]<=11*12=132,因此我們有:
1<=a[1] < a[2] < … < a[77]<=132
那麼序列a[1]+21,a[2]+21,a[3]+21…一定也是一個嚴格遞增的序列
22<=a[1]+21 < a[2]+21 < … < a[77]+21<=153
於是
a[1],a[2],a[3],…,a[n],a[1]+21,a[2]+21,…a[n]+21


這154個數中的每一個都是1到153之間的整數,由此可知,它們中一定有兩個數是相等的
因為a[i]中沒有相等的數,因此a[i]+21中也沒有一個相同的數,
那麼一定有一對數:a[j]=a[i]+21

∞ 例三

設m和n是互素的正整數,並設a和b為整數,其中0<=a<=m-1,0<=b<=n-1
於是存在正整數x,使得x%m=a,x%n=b

為證明這個決定,我們考慮n個整數:
a
m+a
2m+a
3m+a

(n-1)m+a

這些整數中,每一個%m餘數都是a
設其中有兩個數除以n有相同的餘數r,令這兩個數為:im+a,jm+a,其中0<=i < j<=n-1
於是,存在兩個整數Qi和Qj,使得:
i*m+a=Qi*n+r
j*m+a=Qj*n+r
得:(j-i)m=(Qj-Qi)n
因為m,n互質,因此n一定是(j-i)的因子

然而0<=i < j<=n-1,那麼j-i<=n-1,上式不成立

因此,我們可以斷定:這n個數%n之後的餘數各不相同
只要再多取一個數,那麼%n的餘數一定會和之前的n個數中之一一樣

原問題得證

加強版的鴿巢原理

定理一

設Q1,Q2,…,Qn是正整數,如果將(Q1+Q2+…+Qn-n+1)個物體放入n個盒子內
那麼或者第一個盒子至少含有Q1個物體,或者第二個盒子至少含有Q2個物體,…,或者第n個盒子至少含有Qn個物體

證明:
假設我們把(Q1+Q2+…+Qn-n+1)個物體放入n個盒子,而每個盒子中的物品都不超過Qi個
那麼最多有:
(Q1-1)+(Q2-1)+(Q3-1)+…+(Qn-1)=(Q1+Q2+…+Qn)-n
個物品
但是原題目中的物品數目比上式的多一個,這個多出來的物品,無論放在哪一個盒子中,都有原題設

鴿巢原理的加強版的著色術語就是:

如果(Q1+Q2+…+Qn-n+1)個物體,用n種顏色之一著色,那麼存在某個i,使得第i中顏色的物體(至少)有Qi個

顯而易見不是嗎?

推論一

設n和r都是正整數,如果把n(r-1)+1個物體中的每一個物體費拍到n個盒子中,那麼至少有一個盒子含有r個或更多的物體

在本節的最後,我們提出一個很重要的討論:

應用

有n^2+1個人排成一列,總能找到n+1個人向前邁一步,使得他們的身高是遞增的(或遞減的)
注意:我們這裡說的遞增指的是單調不減

我們假設不存在長度為n+1的遞增子序列,證明必然存在長度為n+1的遞減子序列
設每個人的身高就是ai
mi為以每一個元素開頭的最長遞增子序列
由題設得:這裡寫圖片描述
也就是說:n^2+1個m值都分佈在[1,n]這個區間內

由鴿巢原理加強版,一定有n+1個元素的m值相等

這裡寫圖片描述

若存在一個i(i∈[1,2,…,k])使得 這裡寫圖片描述
那麼我們就可以把m[k[i+1]]接到a[k[i]]後面,形成一個新的遞增序列
這樣m[k[i]]>m[k[i+1]],與原題設不符
因此我們得到:這裡寫圖片描述
那麼我們可以同理得出:這裡寫圖片描述
因此數列:這裡寫圖片描述 即為長度為n+1的遞減子序列

原問題得證