組合數學 隨記


組合數學 

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*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章