又临近期末了,没什么时间刷题。就忙里偷闲,看了看布鲁迪的《组合数学》,先看了计数部分,图的部分寒假再说吧。学的仓促,理解也比较肤浅,这里先记下各种有用的公式定理和经典的证明方法,以及一点总结归纳。
1. 鸽巢原理
鸽巢原理的内容就不说了,很简单,但它的应用却有着让人意想不到的功力。
几个例子:
1. 证明:在序列a1,a2,...,am中存在连续个a,这些a的和能被m整除。
如果枚举所有连续和,那么算法复杂度应该是O(n2)。但不管怎样,这种连续和的题都先预处理出从头到第i项的和sum[i]是没错的。假设这些和模m都有一个非零且不同的余数(如果是0或相同那就不用证明了),由于这些余数最多有m-1个,而m>m-1,所以根据鸽巢原理,一定存在sum[i]=sum[j],于是问题得证。
2. (改编)sy大湿计划用11周时间刷poj上的数学题,他决定每天至少做一道题,但为了不使自己过于疲劳,他决定每周不超过12道题。证明存在连续若干天,期间他恰好刷了21道题。
类似上一道题,都是利用给定一个序列,且已知它有多少种不同的数(或范围),再构造出大于这个范围的数目,这样就可以利用鸽巢原理了。证明略
3. 从整数1,2,...,200中选出101的整数。证明:所选的整数中存在这样的两个整数,其中一个可以被另一个整除。
这个证明最精彩的地方在:任意整数都可以写成a*2k(k次方)的形式,其中k>=0,且a是奇数.有了这个后,我们把选的101个数都表示成这种形式,假定a都是不同的,且k也不同(相同就能整除了),由于a只有100种选择,而选了101个数,所以一定有两个a是相同的。
4. 确定一个整数m,使得如果在边长为1的等边三角形内选任意m个点,则存在2个点,它们距离至多为1/n。
答案:n*n+1
鸽巢原理加强形式:
令q1,q2, q3, ...., qn为正整数。如果将 q1,q2, q3, ...., qn - n + 1 个物体