母函式小記

2021-07-08 10:21:36 字數 1760 閱讀 2722

母函式小記

定義:

對於任意數列a0,a1,a2…an 即用如下方法與乙個函式聯絡起來:

g(x) = a0+a1x+a2x*2+a3x^3+….+anx^n

則稱g(x)是數列的生成函式(generating function)

我們知道,(1+x)^k=c(k,0)x^0+c(k,1)x^1+…+c(k,k)x^k

且當k為負數和小數時,

(1+x)^k=c(k,0)x^0+c(k,1)x^1+…+c(k,k)x^k+c(k,k+1)x^(k+1)+c(k,k+2)x^(k+2)+…

廣義的組合數c(k,i)就等於 k(k-1)(k-2)(k-i+1)/i!

高中時我們學過排列組合的乙個問題,求n=x1+x2+x3+…+xk的非負整數解,老師教我們先使等式右邊加k,問題轉化為求n+k=x1+x2+x3+…+xk的正整數解,然後使用隔板發,在n+k-1個空中加入k-1個隔板,總解法有

c(n+k-1,k-1)=c(n+k-1,n)

利用等比數列,我們還可以求得1/(1-x)=1+x+x^2+x^3+x^4+…

對其兩邊求導我們可以得到1/(1-x)^2=1+2x+3x^2+4x^3+5x^4+…

直到對其兩邊求導n次我們可以得到

1/(1-x)^n=1+c(n,1)x^1+c(n+1,2)x^2+c(n+2,3)x^3+…+c(n+k-1,k)x^k+…

我們發現x的k次方的係數為c(n+k-1,k),也就是說求n=x1+x2+x3+…+xk的非負整數解,相當於求k個(1+x+x^2+x^3+x^4+…)相乘所得x^k的係數,也就是c(n+k-1,k),這樣就通過代數的方法解出了「n=x1+x2+x3+…+xk的非負整數解」這個排列組合的問題。

乙個經典的例題是求有1g、2g、3g、4g砝碼各乙個,求能表示的質量

利用母函式

1g能表示的質量轉化為(1+x)(因為可以表示0g或者1g)

同理2g、3g、4g分別轉化為(1+x^2)、(1+x^3)、(1+x^4)

總數量=(1+x)(1+x^2)(1+x^3)(1+x^4)=

1+x+x^2+2x^3+2x^4+2x^5+2x^6+x^7+x^8+x^9+x^10

即可以表示從0到10g的任意質量(對應多少次冪),且表示這些質量的方法分別有1,1,1,2,2,2,2,1,1,1,1種(相應冪級數的係數)

先貼乙個hdu2079 自己理解的演算法,複雜度太高,隨後貼優化的

#includeusing namespace std;

typedef

structmuhanshu;

muhanshu cheng(muhanshu mhs,muhanshu temp_mhs)

}for(j=0;jfinal.num--;}}

}return

final;

}int main()

mhs=cheng(mhs,temp_mhs);

}for(i=0;iif(mhs.mi[i]==n)}}

return

0;}

這是優化過的

#include

int a[10],b[10],c1[41],c2[41];//注意c1c2存的是係數

int main()

for(i=2;i<=k;i++)

}for(j=0;j<=n;j++)

}printf("%d\n",c1[n]);

}return

0;}

生成函式 母函式

根據定義,這個序列作為函式的係數,稱g x 就是序列的母函式。和一般意義上的函式相比,母函式的功能是計數。有這樣一道例題 到這一章為止,已知的計數法則就兩種,加法法則 或 和乘法法則 且 前者是分類思想,後者是分步。法1 分步來看,第乙個骰子有1 5種可能,因為兩個骰子之和是6,所以一旦第乙個骰子確...

生成函式(母函式)

參考部落格 在數學中,某個序列 a n 的母函式 又稱生成函式,英語 generating function 是一種形式冪級數,其每一項的係數可以提供關於這個序列的資訊。有三種物品,分別有 3 2,3個,問拿四個的方案數 f i j 表示當前第i個位置,已經選了j個物品的方案數 f 0 0 1 fo...

母函式 合集

hdu 1521 指數型母函式 hdu 2065 指數型母函式 hdu 2152 母函式 hdu 1709 母函式 hdu 1028 母函式 hdu 1171 母函式 hdu 1085 母函式 hdu 1398 母函式 hdu 1521 指數型母函式 include include include ...