日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数学--数论-多重集排列组合与母函数

發布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数学--数论-多重集排列组合与母函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、無重復元素的排列組合定義

排列,英文名為Permutation,是指從某元素集合中取出指定個數的元素進行排序
組合,英文名為Combination,是指從某元素集合中僅僅取出指定個數的元素,不考慮排序

從有n個不同元素的集合任取r個元素的排列方式有:
P(n,r)=n?(n?1)?...?(n?r+1)=n!/(n?r)!,特別地P(n,n)=n!P(n, r) = n*(n-1)*...*(n-r+1) = n! / (n-r)!,特別地 P(n,n) = n!P(n,r)=n?(n?1)?...?(n?r+1)=n!/(n?r)!,P(n,n)=n!

從有n個不同元素的集合任取r個元素的組合方式有:
C(n,r)=P(n,r)/r!=n!/((n?r)!?r!),特別地C(n,n)=1C(n, r) = P(n, r) / r! = n! / ( (n-r)! * r!),特別地C(n,n) = 1C(n,r)=P(n,r)/r!=n!/((n?r)!?r!)C(n,n)=1

二、多重集合(multiset)的排列組合

設多重集合 S=n1?a1,n2?a2,...,nk?akn=n1+n2+...+nkS = { n1 * a1, n2 * a2, ..., nk * ak }\ \ \ \ \ n = n1 + n2 + ... + nkS=n1?a1,n2?a2,...,nk?ak?????n=n1+n2+...+nk

即集合 S 中含有n1個元素a1, n2個元素a2,…,nk個元素ak,ni被稱為元素ai的重數,k成為多重集合的類別數

在 S 中任選 r 個元素的排列稱為S的r排列,當r = n時,有公式
P(n;n1?a1,n2?a2,...,nk?ak)=n!/(n1!?n2!?...?nk!)P(n; n1*a1, n2*a2, ..., nk*ak) = n! / (n1! * n2! * ...* nk!)P(n;n1?a1,n2?a2,...,nk?ak)=n!/(n1!?n2!?...?nk!)

在 S 中任選 r 個元素的組合稱為S的r組合,當r<=任意ni時,有公式
C(n;n1?a1,n2?a2,...,nk?ak)=C(k+r?1,r)C(n; n1*a1, n2*a2, ..., nk*ak) = C(k+r-1, r)C(n;n1?a1,n2?a2,...,nk?ak)=C(k+r?1,r)

由公式可以看出多重集合的組合只與類別數k 和選取的元素r 有關,與總數無關!

三、多重集合問題的轉化例子

例1:線性方程 x1 + x2 + … + xk = r 一共有多少組非負整數解?

解答:上述不定方程的非負整數解對應于下述排列

1…101…1 01…1 0 … 01…1

x1 個 x2 個 x3 個 … xk 個

其中 k-1個 0 將 r 個 1 分成k段, 每段含1的個數分別為 x1, x2, …, xk,

很明顯這個排列是多重集合 S = { r * 1, (k-1)* 0 }的全排列

即:P(r+k-1; r*1, (k-1)*0) = (r+k-1)! / ( r! * (k-1)! ) = C( r+k-1, r),即從k類元素中選r個的種類

例二:某車站有6個入口處,每個入口處每次只能進一個人, 一組9個人進站的方案有多少?

解答:進站方案可以表示為

1 011 011 01 011 01

g1 g2 g3 g4 g5 g6

其中 1 表示不同的人, 而 0 表示門框, 6-1= 5個門框將序列分為六段,

則任意進站方案可表示成上面 14 個元素 S = { 5 * 1, 1 * p1, 1 * p2, …, 1 * p9 }的一個排列

即:P(5+9;51, 1p1, 1p2, …, 1p9) = 14! / ( 5! * 1! * … 1! ) = 14! / 5!

例三、求從(0,0)點到(m,n)點的非降路徑數

解答:無論哪條路徑,必須在x方向上走m步,y方向上走n步,將非降路徑數與多重集合 S = { m * x, n * y } 的排列建立一一對應關系,所以格路總數為 P(m+n; mx, ny) = (m+n)! / ( m! * n! ) = C(m+n, n) = C(m+n, m)

一般地,設c>=a, d>=b,則由(a,b)到(c,d)的非降路徑數為C(c-a+d-b, c-a)

擴展問題: 在上例基礎上若設m<n,求點(0,1)到點(m,n)不接觸對角線 y=x的非降路徑數據(接觸包括穿過)

解答:從(0,1)到(m,n)的非降路徑,有的接觸 y=x,有的不接觸,對于每條接觸 y=x的非降路徑,做(0,1)關于y=x的對稱點(1,0)到(m,n)的對稱非降路徑,容易看出從(0,1)到(m,n)接觸y=x的非降路徑與 (1,0)到(m,n)的非降路徑(必穿過y=x)一一對應,

故所求的非降路徑數為 C(m+n-1, m) - C(m+n-1, m-1)

例四、將r個相同的小球放入n個不同的盒子,總共有多少種方案?

解答:該問題可以轉化為r個相同的小球與n-1個相同的盒壁的排列問題

1…1 0 1…1 0 1…1 0 … 0 1…1

其中有 n-1個 0 分成 n段,每段表示不同的盒子, 每段中1的個數表示該盒子里放入的小球總數,總共r個1

即:P( r+n-1; r*1, (n-1)*0 ) = (r+n-1)! / ( r! * (n-1)! ) = C( r+n-1, r)

例五、求集合 X = { 1,2,…, n }的不含相鄰整數的k元子集個數

解答:任意一個X的k元子集s都可以對應于一個由0,1組成的有序n重組(a1 a2 … an),其中 ai = 1 當 i屬于s,否則 ai = 0,當i不屬于s,由于s中不含相鄰整數,所以在此n重組中沒有兩個1是相鄰的,所以子集s是與這樣的n重組 S = { k*1, (n-k)*0 }之間是一一對應的,由于任意兩個1彼此不相鄰,故可以把(n-k)個0依次排列,然后在(n-k+1)個空隙中插入k個1,所以從(n-k+1)個空隙中選擇k個位置來放置1,有 C(n-k+1, k) 種選法,這也是原問題所對應的答案。

四、母函數
生成函數(母函數)有普通生成函數和指數生成函數:
1.普通生成函數用于解決多重集的組合問題

2.指數型母函數用于解決多重集的排列問題

母函數可以解決遞歸數列的通項問題:斐波那契數列、卡特蘭數列等

普通母函數:
構造母函數G(x), G(x) = a0 + a1x + 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 + a1x + a2 + a3* +…+ akk* (設kk=k1·p1+k2·p2+…kn·pn) (二)

G(x)含義: ak 為屬性值和為k的組合方法數。

母函數利用的思想:
1.把組合問題的加法法則和冪級數的乘冪對應起來。

2.把離散數列和冪級數對應起來,把離散數列間的相互結合關系對應成為冪級數間的運算關系,最后由冪級數形式來 確定離散數列的構造。

代碼實現:
求G(x)時一項一項累乘。先令G=1=(1+0x+0+…0*),再令G=G*(1++…)得到形式(二)的式子…最后令G=G*(1+++…)。
下面是指數型母函數的定義:


對于上面的問題“假設有8個元素,其中a1重復3次,a2重復2次,a3重復3次。從中取r個組合,求其組合數。”:

(感謝 3Dnn 同學指出,下圖的 28/3! 應該改為 26/3!)

引用博客1
引用博客2
引用博客3

總結

以上是生活随笔為你收集整理的数学--数论-多重集排列组合与母函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。