组合数学之四 —— 鸽巢原理

来源:互联网 发布:sql包含某个字符 编辑:程序博客网 时间:2024/05/23 19:17

嘿,大家统统围过来,给你们看一个很棒的东西,那是一种很酷很辣很炫很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的递减子序列

原问题得证

原创粉丝点击