【離散數學】計數/排列組合

離散數學第三篇,討論基本的計數技術——排列組合及其推廣。組合數學是離散數學的重要組成部分,這裏比較簡略,待到有時間詳細學習組合數學後再討論一些複雜一點的問題。那何爲組合數學呢?組合數學(Combinatorics)是研究一定條件的組態的存在、計數以及構造的科學。直白說就是研究物體如何安排的科學。這裏的組合數學是狹義的組合數學,廣義的組合數學就是離散數學。因計算機科學的核心就是使用算法研究離散數據,所以組合數學在算法科學中具有重要地位。本文主要內容:基本計數原則、鴿巢原理、排列組合及其推廣、二項式定理與恆等式以及生成排列組合的算法。


基本計數原則

乘法原則

如果一個任務被分解爲相互獨立的兩個步驟,完成第一個步驟有 n1 種方法,第二個步驟有 n2 種方法,則完成整個過程方法數爲n1n2 。推廣到多個步驟就是n1n2nk ,共k個步驟,ni 是第i 個步驟的方法數。

用集合語言描述如下:|A1×A2××Ak|=|A1||A2||Ak|

求和原則

如果有兩種獨立的途徑完成一項任務,第一種有 n1 種方法,第二種有 n2 種方法,則完成該任務共有n1+n2 種方法。推廣到多種途徑就是 n1+n2++nk 種方法。

也稱爲加法原則。用集合語言描述:|A1A2Ak|=|A1|+|A2|++|Ak| ,其中AiAj= ,對所有 ij .

減法原則

如果一個任務可以有兩種途徑完成,第一種有 n1 種方法,第二種有 n2 種方法,兩種途徑中有 n3 種方法是相同的。則完成該任務共有 n1+n2n3 種方法。

集合語言描述:即是兩個集合的容斥原理 |A1A2|=|A1|+|A2||A1A2|

除法原則

如果一個任務可以由 n 種方法完成,而在這 n 中方法中每一種完成的方式在 n 種中正好有 d 種與之對應(即在該問題的研究中可以看做一種方法),則完成該任務的方法數爲 n/d

這幾個原則乃是計數最基礎的原則,很好理解。


鴿巢原理

鴿巢原理的通俗描述:如果鴿子比籠子多,那麼一定有一個籠子裏面至少有兩隻鴿子。

鴿巢原理

描述:把 k+1 個甚至更多物體放入 k 個盒子,那麼至少有一個盒子裏面有兩隻甚至更多個物體。

推論:從 k+1 個甚至更多個元素的集合到 k 個元素的集合的函數 f 一定不是一對一函數。

廣義鴿巢原理

描述:將 N 個物體放入 k 個盒子,那麼至少有一個盒子裏面有 N/k 個物體。

應用

定理:每個由 n2+1 個不同實數構成的序列都包含一個長度爲 n 的嚴格遞增子序列或嚴格遞減子序列。

上述定理可以使用廣義鴿巢原理證明。

拉姆齊數(Ramsey number)R(m,n) (其中m,n2 ) 是這樣一個數 N ,使得在 N 個人中有 m 個人互相認識或 n 個人互相不認識需要的最小人數 N 。其中兩個人要麼互相認識,要麼互相不認識。

拉姆齊定理(Ramsey theory)是組合學的一個重要組成部分,用來處理集合元素的子集分配問題。
拉姆齊數也是圖論中的重要函數之一。已知的拉姆齊數非常少,這包括 R(2,n)=n (其中n2)R(3,3)=6R(4,4)=18 等。有一個關於拉姆齊數的笑話

想像有隊外星人軍隊在地球降落,要求取得R(5,5)的值,否則便會毀滅地球。在這個情況,我們應該集中所有電腦和數學家嘗試去找這個數值。若它們要求的是R(6,6)的值,我們要嘗試毀滅這班外星人了。

形象的描述了尋找拉姆齊數的難度。我們只能知道很多拉姆齊數的上下界,包括著名的 43R(5,5)49


排列組合

解決某些計數問題時,我們會發現可以通過找到特定大小集合中不用元素的排列的方法數來解決問題,其中元素的次序收到限制,即是排列問題(Arrangement)。而另一些問題可以通過找到從特定大小元素集合中選出特定數量元素的方法數來解決,即是組合問題(Combination)。這裏詳細闡述這兩類問題。

排列

n 個不同元素組成的集合中選出r 個元素排成一列,即需要考慮排列的次序。這種有序安排稱爲n 元素集合的r排列。排列的方法數記作P(n,r) (也記作 Anr 或者 Pnr ),讀作n 元素集合的r 排列數。

顯然,P(n,r)=n(n1)(n2)(nr+1)=n!(nr)!
n 元素集合的全排列爲P(n,n)=n!

組合

n 個不同元素組成的集合中無序選出r 個元素,即不需要考慮排列的次序。這些無序選取的元素構成該集合的子集,稱爲n 元素的一個r 組合。組合的方法數記作C(n,r) (或者Cnr ),讀作n 元素集合的r 組合數。也記作(rn) ,並且稱爲二項式係數。

顯然,C(n,r)=n!r! (nr)!=P(n,r)P(r,r)=n(n1)(n2)(nr+1)r!

顯然有

C(n,r)=C(n,nr)
P(n,r)=C(n,r)P(r,r)
基礎不過多解釋。

二項式定理與恆等式

n 元素集合的 r 排列數常記作(rn) ,由於這些數出現在二項式冪(a+b)n 的展開式中作爲係數,所以也稱二項式係數

二項式定理

xy 是變量,n 是非負整數,那麼

(x+y)n=j=0n(jn)xnjyj
這很容易理解,由二項式定理可以得到任何一個(x+y)n 的展開式。

一些推論:

  • k=0n(kn)=2n ,令x=y=1 得到。
  • k=0n(1)k(kn)=0 ,令x=1y=1 得到。
  • k=0n2k(kn)=3n ,令x=1y=2 得到。

帕斯卡恆等式

nk 是滿足 nk 的正整數,則有(kn+1)=(k1n)+(kn) .

證明:現從n+1個元素中取k個元素組成一個集合,將n+1個元素集合分爲兩部分,一個包含n個元素,一個包含1個元素。現要從n+1個集合中取出k個元素,則將有兩種選擇——包含這單獨的一個元素與否,若包含,則只需要從n個元素中取出另外的k-1個,若不包含,則需從n箇中取出全部k個,由加法原則有(kn+1)=(k1n)+(kn)

我們可以使用帕斯卡恆等式遞歸定義二項式係數。

帕斯卡三角形

帕斯卡三角形的基礎是帕斯卡恆等式,亦是著名的楊輝三角
如下:

(00)(01)(11)(02)(12)(22)(03)(13)(23)(23)(04)(14)(24)(34)(44)(05)(15)(25)(35)(45)(55)(06)(16)(26)(36)(46)(56)(66)

計算出數值:
111121133114641151010511615201561

在上述三角形中,用帕斯卡恆等式可以證明,每個二項式係數均等於該數其上一行左右兩係數之和(左邊或者右邊沒有數的可以看做是0),即每一行相鄰兩個係數相加就產生了下一行的這兩個係數中間的二項式係數。

其他二項式係數恆等式

範德蒙德恆等式:

(rm+n)=k=0r(rkm)(kn)

證明方法:將m+n個元素的集合分爲m個和n個元素的兩個集合,從這兩個集合中合取r個元素的方法數與從原來m+n個元素集合中取r個元素的方法數相等。

推論:
m=n 即可得到:(n2n)=k=0r(kn)2

定理:rn 爲非負整數,rn ,那麼

(r+1n+1)=j=rn(nj)

證明:考慮包含r+1個1的n+1位01位串,最後一個1出現的位置可能是r+1,r+2,…,n+1位上,則其餘的1則出現在前面。若最後一位在第j+1位上,則前面j位出現的r個1的位串數爲(rj) ,由加法法則即可證明上述恆等式。

多項式定理

類比二項式定理,由排列組合與計數原則可以得到:
多項式定理:如果n是正整數,則

(x1+x2++xm)n=x1+x2++xm=nC(n;n1,n2,...,nm)x1n1x2n2xnnm

其中多項式係數C(n;n1,n2,...,nm)=n!n1!n2!nm!

證明:從n 次冪中選出n1 次給x1n2 次給x2 ,…,nmxm 即可,係數C(n;n1,n2,...,nm)=C(n,n1)C(nn1,n2)C(nm,nm) 化簡即可得到上述式子。


排列組合的推廣

單純的排列與組合能解決的問題十分有限。因爲排列與組合要求所有元素不同,而且不能重複選擇一個元素。而某些問題中涉及重複選擇與具有不可區分的元素的排列組合。這時需要對排列組合進行推廣。我們還可以通過模擬把物體放入盒子的過程來解決許多問題,其中的物體可以是可分辨的與不可分辨的,盒子也可以是可分辨的與不可分辨的。

有重複的排列

當元素允許重複時,由乘法法則很容易得到排列數。

定理:n 個元素集合的允許重複r 排列數是 nr

有重複的組合

n 個元素集合的允許重複的 r 組合有C(n+r1,r)=C(n+r1,n1) 個。

證明:因爲n個元素可以重複,我們可以將其等效爲n個盒子,放入其中的元素不區分,並用n-1條隔板將其分隔。則n元素集合的允許重複的r組合數即是將選出r個元素放入n個盒子中,即用n-1個隔板將其隔開。則從n個元素中可重複地選r個即可等價爲從隔板和物體構成的n+r-1個物體或者隔板的排列中選出r個物體或者選出n-1個隔板的位置。即是C(n+r1,r)=C(n+r1,n1)

允許重複與不允許的排列組合數:

類型 允許重複 公式
r 排列 n!(nr)!
r 組合 n!r!(nr)!
r 排列 nr
r 組合 (n+r1)!r!(n1)!

具有不可區分物體的排列

設類型 jnj 個物體,1jkn1+n2++nk=n ,則 n 個物體的不同排列數爲

n!n1!n2!nk!

即是從n 個位置中選 nj 個來放類型j 的物體,有:
C(n,n1)C(nn1,n2)C(nk,nk)=n!n1!n2!nk!

把物體放入盒子的問題

許多問題都可以等效爲把物體放入盒子的問題。其中的物體可以是可分辨的與不可分辨的,盒子也可以是可分辨的與不可分辨的。其中如果盒子是可分辨的,則可以轉化爲前面的問題。如果盒子是不可分辨的,不管物體可不可分辨,都將沒有閉公式,可以通過列舉或者編程求解來解決此類爲題。

可分辨的物體與可分辨的盒子

n 個可分辨的物體放入 k 個可分辨的盒子使得 ni 個物體放入盒子 i (i=1,2,...,k )的方法數爲:

n!n1!n2!nk!

不可分辨的物體與可分辨的盒子

n 個不可分辨的物體放入 k 個可分辨的盒子使得 ni 個物體放入盒子 i (i=1,2,...,k )的方法數爲:C(n+k1,n)

可以看到這即是 k 個元素集合的可重複的 n 排列數。

可分辨的物體與不可分辨的盒子

這類問題求出公式比較複雜,列舉可解決。這裏略過。

不可分辨的物體與不可分辨的盒子

列舉同樣可以解決,這裏通過一個例子來說明。
例:將6個物體放入4個盒子,有以下方式:
6
5,1
4,2
3,3
4,1,1
3,2,1
2,2,2
3,1,1,1
2,2,1,1
共9種方式。

n 個不可分辨的物體放入 k 個不可分辨的盒子等價於將 n 寫成 k 個非遞增正整數之和。其中的每一種方法,我們將其稱作將正整數n 劃分成k 個正整數的一個劃分,用 pk(n) 來表示。則將 n 個不可分辨的物體放入 k 個不可分辨的盒子的方法數爲 pk(n) 。對此,沒有簡單的公式來表示,略。


生成排列及組合的算法

以後補上。


參考資料:《離散數學及其應用》(本科教學版,Kenneth H.Rosen著,原書第七版)

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