《组合数学》读书笔记

来源:互联网 发布:淘宝店铺装修用什么app 编辑:程序博客网 时间:2024/05/29 06:32

又临近期末了,没什么时间刷题。就忙里偷闲,看了看布鲁迪的《组合数学》,先看了计数部分,图的部分寒假再说吧。学的仓促,理解也比较肤浅,这里先记下各种有用的公式定理和经典的证明方法,以及一点总结归纳。


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 个物体放到n个盒子中,则存在一个i,使得第i个盒子至少含有qi个物品。
举一道典型题目:
一个袋子装了100个苹果,100个香蕉,100个橘子,100个梨子。如果我们每分钟从袋子里取出1种水果,那么需要多少时间我就能肯定至少已经拿出1打相同种类的水果。
答案:(12-1)*4+1


2. 排列与组合
一条经验法则:让最有约束性的选择优先。
组合学中有一种强大的证明方法:“双计数”技术。
减法原理:适用于,当对U和A补计数比对A计数容易。

n个元素集合的循环r-排列公式:
P(n,r)/ r = n! / r*(n-r)!
对于不能直接运用公式的时候,可以用把某个元素固定在一个位置的思想。
当然,更一般的方法是用polya计数,这个后面再谈。

多重集排列公式:
n!/ n1!*n2!*...*nk!
多重集组合公式:
C(r+k-1,r)


3. 二项式系数
Pascal公式:

C(n,k) = C(n-1,k)+ C(n-1,k-1)
二项式系数递推式:
a[k+1] = a[k] * (n-k) / (k+1);
一些恒等式:
k*C(n,k) = n * (n-1,k-1)
(0~n)∑C(n,k)* C(n,k) = C(2n,n)
广义二项式,(广义阶乘)
。。。
二项式系数中的最大者:
C(n,下取整(n/2)) = C(n,上取整(n/2))
S是包含n的元素的集合,S的杂置就是S的组合的集合C,具有这样的性质:C中没有组合含义另一个组合。
|C|的最大值是C(n,下取整(n/2)),根据sperner定理。
应用:一个talk show节目主持人仅准备了10个笑话。每个晚上他都会讲一些笑话,使你能够收听到从未在此之前的晚上至少全部播放过的笑话,求这样的晚上最大能有多少?
多项式系数:
C(n,k1,k2,...,kt) = n!/ k1! * k2! *...*kt!


4. 容斥原理
集合S不具有性质P1,P2,...,Pm的物体的个数:
 _     _           _
|A1∩A2∩...∩Am| = |S|-∑|Ai|+∑|Ai∩Aj|+...+(-1)m|A1∩A2∩...∩Am|
至少具有性质P1,P2,...,Pm之一的集合S的物体的个数:
|A1∪A2∪...∪Am| = ∑|Ai| - ∑|Ai ∩ Aj| + ...+(-1)m+1|A1∩A2∩...∩Am|
下面举一些容斥原理的应用
1.求满足 1<=x1<=5 ,-2<=x2<=4,0<=x3<=5,3<=x4<=9
的方程 x1+x2+x3+x4=18 整数解的个数
原问题等价为0<=y1<=4,0<=y2<=6,0<=y3<=5,0<=y4<=6
y1+y2+y3+y4=16的解的个数
令P1为y1>=5,P2为y2>=7,P3为y3>=6,P4为y4>=7
S是所有方程非负整数解的集合,令Ai表示S的满足性质Pi(i=1,2,3,4)的解组成的子集
然后套用容斥原理就可以了。
2.错位排列
错位排列的定义就不解释了,可以看题目就能明白
公式:
Dn = n!(1-1/1!+1/2!-1/3!+...+(-1)n*1/n!)


5. 生成函数
生成函数(母函数)很适合求解计数问题。因为,
一方面,生成函数可以看成是代数对象,其形式上的处理使得人们可以通过代数手段计算一个问题的可能性数目;
另一方面,生成函数是无限可微分函数的泰勒级数。如果能够找到函数和它的泰勒级数,那么泰勒级数的系数则给出问题的解。
生成函数以非常紧凑的形式将无穷序列的信息浓缩于自身。

母函数计数的精华思想,还是举例说明比较清楚。
问题描述:确定可以由苹果、香蕉、橘子和梨袋装水果的袋数Hn,其中在每个袋子中苹果数是偶数,香蕉数是5的倍数,橘子数最多是4个,而梨的个数为0或1
g(x) = (1+x2+x4+...)(1+x5+x10+...)(1+x+x2+x3+x4)(1+x)
     = (1/1-x2)(1/1-x5)(1-x5/1-x)(1+x)
     = 1/1-x2
     = ∑C(n+1,n)Xn
所以,Hn = n+1
这里用到了一个很重要的公式(M67称它为核武器):g(x) = 1 / 1 - xk  = ∑C(n+k-1,n)Xn;
因为我们平常即使求出了母函数,也不容易直接得到它写成求和形式的表达式(这样才能得到所需的系数),而对于上面那种特殊情况,却有这么的一个公式,可以方便的得到系数
对于母函数在acm做题中的应用,要和FFT(快速傅里叶变换)结合起来,后者可以快速的计算多项式乘法。

6. Catalan数&&格路径
定理:n个+1和n个-1构成的2n项,a1,a2,...,a2n
其部分和满足a1+a2+...+ak >= 0(1<= k <= 2n)
的数列的个数等于第n个Catalan数
Xn = C(2n,n) / n+1
这个定理的经典之处在于构造出了+1,-1的抽象模型,从而为各种Catalan数应用的题目提供了模型
两例经典应用:
1.有2n个人排成一行进入剧场。入场费5元每人。但现在2n个人中,n个人持有5元,n个人持有10元,且售票处开始时没有钱。问有多少种排队方式使得每个人都保证有钱找(或者不用找)?
把持有10元的人看做+1;5元的-1
2.在一个n*n的地图上,一个人从他家(0,0)到办公室(n,n)走2n步,且不穿过家到办公室的对角线(可以碰到!),有多少种走法?
求出在对角线上面的路线*2
用+1标志北;-1标志东。
这类问题有更一般的形式,下面我们来进行讨论
问题描述如下:考虑一个具有整数坐标的坐标平面中点的整格,
从(0,0)走到(m,n),用水平步进,垂直步进,(对角步进),有多少种走法(不能往回走,往回走的需要另外的解法,这里就不讨论了)
1. 无限制的情况
C(m+n,m)
2.下对角线格路径
这里用到了一个很经典的等价转化。先想到的是用减法原理,求穿过对角线的格路径数。怎么求呢?考虑把一条从(0,0)穿过对角线到达(m,n)的路径向下平移一个单位,得到的是一条,从(-1,0)到
(m-1,n)的依然穿过(也可能变成接触)对角线的路径。光有这个还看不出来什么方便,因为算从(-1,0)到(m-1,n)的路径数依然不好算,那我们接着转化。把平移后的每条路径,从(-1,0),到该路径与对角线的第一个接触点d,这一段,再沿着对角线反射,从而得到一条(0,-1)到
(m-1,n)的路径。这条路径与题设开始要求的那条路径一一对应,且这中情况下的路径数就好算了,就是无限制下的
C(m+n,m-1),所以最终答案为
C(m+n,m)*(m-n+1)/m+1,在m=n的情况下也符合Catalan数

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击