【算法复习四】计算复杂性与算法分析---组合数学知识汇总

一,组合数学问题

        1)排列定义  

            n个不同的元素中,取r个不重复的元素,按次序排列,称为从n个中取r个的无重排列。

            排列的全体组成的集合用P(n,r)表示。当r=n时称为全排列。

 

            组合定义  

              定义从n个不同元素中取r个不重复的元素组成一个子集,而不考虑其元素的顺序,称为从n个中取r个的无重组合。

              组合的全体组成的集合用C(n,r)表示。

        

       2)例题一某车站有6个入口处,每个入口处每次只能进一人,一组9个人进站的方案有多少?

 

          【解法一进站方案表示成:

                       00011001010100

           其中“0”表示人,“1”表示门框,其中“0”是不同元,“1”是相同元。给“1”n个门只用n-1个门框。任意进站方案可表示成上面14个元素的一个排列。

           [解法1]

                    分析:第一个人可以有6种进站的方式,也就是从6个入口的任意一个站进站,那么第二个人也可以有6种选择入口的方法,但是假如他和第一个人选择的入口是相同的话,就有谁在前的情况,所以第二个人就有了7种进站方案;同理,第三个人进站的话就有8种进站方案,这样算下去,那么第九个人就有14种进站的方法。

             

                  故所求方案为   14!/5!=6×7×8×...×14=726485720  

         [解法2]

                   在14个元的排列中先确定“1”的位置,有C(14,5)种选择,在确定人的位置,有9!种选择。

           故 C(14,5)*9! 即所求:14!/5! 

                   注意:C(14,5)= (14! - (14-5)!)/ 5!

                   如:a10 a3 a40 a6 a70 a9 a100 a120 a14

                   方案为(2,5,8,11,13

        

         例题二简单格路径数问题 (类腾讯笔试题)

               从 (0,0)点出发沿x轴或y轴的正方向每步走一个单位,最终走到(m,n)点,有多少条路径?

              【分析】无论怎样走法,在x方向上总共走m步,在y方向上总共走n步。若用一个x表示x方向上的一步,一个字母y表示y方向上的一步。

                            则(0,0)→(m,n)的每一条路径可表示为mxny的一个有重排列。将每一个有重排列的xy分别编号,可得m!*n!m+n元的无重全排列。

              【分析】向上可以走m步,向右可以走n步。注意,必须向上走m步,向右走n步才能到达(m,n)

                          只需要考虑上和右依次在哪里出现,所以不难得出答案  C(m+n,n)=C(m+n,m)

 

        3)容斥原理

             最简单的计数问题是求有限集合AB的并的元素数目。显然有

             • 定理即具有性质AB的元素的个数等于具有性质AB的元素个数。

         求a,b,c,d,e,f六个字母的全排列中不允许出现acedf图象的排列数。

        解:设Aace作为一个元素出现的排列集,Bdf作为一个元素出现的排列集, A∩B为同时出现ace、df的排列数。

                • |A|=4|B|=5 |A∩B|=3

                  |A∩B|= 6!- (5!+4!)+3!=582

       4) 容斥与鸽巢原理

              鸽巢原理之一: 鸽巢原理是组合数学中最简单也是最基本的原理,也叫抽屉原理。即“若有n个鸽子巢,n+1个鸽子,则至少有一个巢内有至少有两个鸽子。”

                   • 367人中至少有2人的生日相同。

                   • 10双手套中任取11只,其中至少有两只是完整配对的。

                   • 参加一会议的人中至少有2人认识的别的参加者的人数相等。

 

             鸽巢原理之二:m1 , m2 , … , mn都是正整数,并有m1 + m2 +… +mn-n + 1个鸽子住进n个鸽巢,则至少对某个 i有第 i个巢中至少有mi个鸽子,i = 1 , 2 , … , n.

                   •显然,鸽巢原理之一是鸽巢原理之二的特殊情况,即m1 = m2 = … = mn= 2,如若不然,则对任意 i, 都有第i个巢中的鸽子数≤mi-1 则,鸽子总数≤ m1 + m2 +… +mn-n,与假设相矛盾.

             

              例题一:拉蒙赛(Ramsey问题

                            6 个人中至少存在3人相互认识或者相互不认识

                           •证:这个问题与凸六边形完全图的内边着二色,存在同色三角形等价.假定用红蓝着色

                           • 六边形完全图的顶点集为{v1, v2 , ··· , v6 },dr(v)示与顶点v 关联的红色边的条数,db(v)示与v 关联的蓝色边的条数.在六边形完全图中,有dr(v)+db(v)=5,由鸽巢原理可知,至少有3条边同色.

    

             例题二:拉丁方

                         1,2,3..,n构成的nn方阵aijnn

                        要求:每行每列1,2,3..,n各出现一次。称为拉丁方。

 

二,生成函数

          生成函数定义

              对于序列a0,a1,a2,a3,a4……构造一函数:G(x) = a0 + a1x + a2x`2 + ……称函数G(x)是序列a0,a1,a2,a3,a4……的生成函数。

              •例如:(1+x)`n是C(n,0),C(n,1),C(n,2)……C(n,n)的生成函数。

              •如若已知序列a0,a1,a2,a3,a4……则对应的生成函数G(x)便可根据定义给出。反之亦然。

            例题:由红球两个,白球、黄球各一个,试求有多少种不同的组合方案

           一个球:3

           二个球:4

           三个球:3

           四个球:1      总共:12种

 

三,指数型生成函数

 

         指数型生成函数的概念

              设有n个元素,其中元素a1重复了n1 次,元素a2重复了n2 次,…,ak重复了nk次,从中取r个排列,求不同的排列数.

             如果n1 = n2 = n3 = …… nk = 1,则是一般的排列问题。

          现在由于出现重复,故不同的排列计数便比较复杂。先考虑n个元素的全排列,n个元素没有完全一样的元素,则应有n!  种排列。若考虑ni 个元素ai 的全排列数为ni!,则真正不同的排列数为  n! /(n1!*n2!*……nk!)

 

posted on 2012-05-06 21:08  小田的专栏  阅读(548)  评论(0编辑  收藏  举报

导航