组合数学 随记


组合数学 

1.母函数

 母函数(生成函数):   

       生成函数有普通型生成函数和指数型生成函数两种(本题是普通型)。

     形式上,普通型母函数用于解决多重集的组合问题,

                   指数型母函数用于解决多重集的排列问题。

         母函数还可以解决递归数列的通项问题(例如使用母函数解决斐波那契数列,Catalan数的通项公式)。

  1.普通母函数:  /*hdu2082*/

         构造母函数G(x), G(x) = a0 + a1*x + a2* + a3* +....+ an*,  则称G(x)是数列a0,a1…an的母函数。

         通常普通母函数用来解多重集的组合问题,其思想就是构造一个函数来解决问题,一般过程如下:

         1.建立模型:物品n种,每种数量分别为k1,k2,..kn个,每种物品又有一个属性值p1,p2,…pn,(如本题的字母价值),

         求属性值为m的物品组合方法数。(若数量ki无穷 也成立,即对应下面式子中第ki项的指数一直到无穷)

        2.构造母函数:G(x)=(1++…)(1+++…)…(1+++…)        (一)

                                           =a0 + a1*x + a2* + a3* +....+ akk*     (设kk=k1·p1+k2·p2+…kn·pn)  (二)

                  G(x)含义: ak 为属性值为k的组合方法数。

母函数利用的思想:

         1.把组合问题的加法法则和幂级数的乘幂对应起来。

         2.把离散数列和幂级数对应起来,把离散数列间的相互结合关系对应成为幂级数间的运算关系,最后由幂级数形式来

        确定离散数列的构造。

代码实现:

        求G(x)时一项一项累乘。先令G=1=(1+0*x+0*+…0*),再令G=G*(1++…)得到形式(二)的式子…最后令G=G*(1+++…)。

 

   2.指数型母函数  /*hdu1521*/

指数型母函数:(用来求解多重集的排列问题)

    n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列。

    若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其重复度为ni!

    同理a1重复了n1次,a2重复了n2次,····,ak重复了nk次,n1+n2+····+nk=n。

    对于这样的n个元素进行全排列,可得不同排列的个数实际上是     /*hdu5651*/

    若只对其中的r个元素进行排列呢,那就用到了指数型母函数。

    构造母函数G(x)=+则称G(x)是数列a0,a1…an的指数型母函数。

    一般过程:

    1.建立模型:物品n种,每种数量分别为k1,k2,..kn个,求从中选出m个物品的排列方法数。

    2.构造母函数:G(x)=(1+ + …+)(1+ ++…)…(1+ ++…)

                                =a0+a1·x+  ·  + · +… ·     (其中pp=k1+k2+k3…kn)

                      G(x)含义:ai为选出i个物品的排列方法数。    

 若题中有限定条件,只要把第i项出现的列在第i项的式中,未出现的不用列入式中。

           如:物品i出现的次数为非0偶数,则原式改为…*(    +  +     )*…

 

 

2.Catalan数

卡特兰数(Catalan):前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670…

    令h(0)=1,h(1)=1,catalan数满足递推式:

     h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)

    另类递推式:

   

    递推关系的解为:

   

    递推关系的另类解为:

   

   对于在2n位的2进制中,有n个0,其余为1,且1的累计数>=0的累计数,二进制数有种

   对于在n位的2进制中,有m个0,其余为1的catalan数为:

    理解:catalan数的理解

    应用:

    1.出栈次序: 一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?          h(n)种。   /*hdu1032*/

    2.给定节点组成二叉树:给定n个节点,能构成多少种不同的二叉树?    h(n)种。

    3.括号化:矩阵连乘,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,有几种括号化的方案?  h(n-1)种。

4.凸多边形三角划分:在一个凸n边形中,通过若干条互不相交的对角线,有多少种方法把这个多边形划分成若干个三角形? h(n-2)种。

/**/   

3.容斥定理

容斥原理:(容许) 先不考虑重叠的情况,把包含于某条件中的所有对象的数目先计算出来,(排斥)然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复。

公式:            奇加偶减

一般求互质个数若用欧拉函数不好解决,则从反面考虑,用容斥。

/*hdu2848*/

你可能感兴趣的:(组合数学 随记)