第五章介紹了基本的組合計數知識,組合數學是研究如何對物件進行安排的學科,最早誕生於賭博遊戲,因此也是概率論的基礎,這章介紹的基本知識點涉及如下幾個方面:基本計數原理,鴿巢原理,基本排列和組合,二項式定理和廣義排列和組合。
先來看看基本計數原理,基本計數原理可以說是組合計數的基礎,為什麼這麼說呢?因為很多組合計數的公式都是由基本計數原理推導出來的,因此基本計數原理可以說得上是組合基礎大廈的基石。基本的計數原理有兩條,其實就是大家熟悉的「乘法原理」和「加法原理」。二者既有區別又有聯絡。首先我們先來假定有這麼乙個基本過程(procedure),它代表完成某個工作的流程(你也可以把它理解為解決某個問題的演算法),它有兩個基本的步驟(任務)組成,也就是任務一(task1)和任務二(task2),完成這兩個任務後我們才真正地做完了整個過程。那麼乘法原理講的道理就是,如果我們用n1種方法完成了任務一,那麼接下來如果我們再用n2種方法完成了任務2,那麼總共我們能夠用來完成整個過程的方法數為n1*n2。而加法原理則認為,對於任務1,如果它有n1種方式完成,同時也有n2種方式完成,且n1種方法的每一種方法都不會出現在n2中,也就是說兩種方法的集合之間是沒有交集的(注意,這是乙個重要條件!如果存在交集的話就不是加法原理了,而是容斥原理,所以你可以將加法原理看成容斥原理的乙個特例),那麼完成任務1的方式總共有n1+n2種。除了基本計數原理以外,鴿巢原理也是乙個有用的組合工具,k為正整數,如果我們有大於等於(k+1)只鴿子飛到了k個鴿巢中,那麼一定存在大於等於1個的鴿巢中有大於等於2只的鴿子。廣義的鴿巢原理甚至說的更仔細——n只鴿子飛到k個鴿巢裡,那麼有大於等於1個鴿巢中含有n/k向上取整這麼多隻鴿子,然後我們就可以使用n=k(r-1)+1這個公式對n進行計算。鴿巢原理有很多很巧妙的應用,不好掌握,要注意反覆體會。
組合數學既然是研究如何安排物件的學科,那麼我們關注的重點當然要放在物件的安排問題上。物件的安排可以有兩大類——有序的和無序的,有序安排就是排列,無序的安排就是組合。那麼對於n個元素的r-排列,我們可以用乘法原理(看,大廈的基石出來了)得到排列數公式。又因為r排列可以看成是先選出r個數,然後對其進行全排列,所以r-組合的公式也就可以從r-排列的公式中得到了。得到的c(n,r)還有乙個很厲害的名字,叫做——二項式係數,因為它大量出現於(x+y)^n的表示式中。對於這個表示式,我們有非常優美的二項式定理來完美定義,由二項式定理還推出了「1+1」,「1+(-1)」和「1+2」三個漂亮的推論。關於二項式係數,有大量的二項恒等式,比如著名的帕斯卡恒等式和帕斯卡三角(其實是楊輝三角好吧!)和范德蒙恒等式(讓我想起了線性代數中的範德蒙行列式),對於這些組合恒等式的證明,我們引入了乙個新的方法——組合證明,組合證明的基本原理就是證明恒等式的兩邊使用了不同的方式對同一類物件進行計數,是乙個非常有趣的證明方法,因為你要把恒等式的兩邊用模型去套用,套對了就證明出來了。
以上所說的還是基本的排列和組合,是不允許重複元素出現的。如果你認為組合計數就這點內容,那麼你就太小看她啦,其實排列和組合還可以進一步推廣的。對於排列,(1)如果我們允許重複元素出現的話,那麼依然根據乘法原理得出其公式;(2)如果待排列的元素中出現了無法區分的元素(比如單詞「success」中出現了3個s,它們都是不可區分的),那麼這種含有不可區分元素的排列就要在全排列的基礎上除去冗餘的重複排列(相對於不可區分的元素而言)。說完了排列,我們來說說廣義的組合,廣義的組合也是允許重複元素出現的,對於這種情況,我們用錢盒子模型再加上一點點基本的計數公式就推導出來了,假設我們有乙個錢盒子,它有幾個槽,分別是1美元,5美元,10美元和20美元的,裝有各類面值的美元若干,如果我要取出5張紙幣,有多少方法,這不就允許重複了麼,這樣的情況下通過分隔欄和紙幣數目的建模我們得到公式c(n+r-1,r),問題搞定!說到模型,下面就要引出更為強大的「盒子模型」了——對於很多計數問題,如果你能將它抽象成某種型別的盒子模型,那麼你就可以套用模型解決問題了,這就是「觀察和模擬」的強大威力(喬治波利亞萬歲!),盒子模型有四種,下面一一說來。(1)首先出場的是「可區分的物件放入可區分的盒子」模型,對於這些放入盒子的物件,我們可以這樣看:放入盒子i中的物件都帶上了i的標記,那麼它們在盒子裡是怎麼個排列的順序就無關緊要了(大家都是帶i標記的,彼此平等),所以全排列除以每個盒子中物件的排列數就可以了(這與存在不可取分的元素的排列公式一樣,因為其內涵和本質是相同的)(2)「不可區分的物件放入可區分的盒子」模型,不可區分的物件是說彼此是不可區分的,那麼好,放入哪個盒子我們仍然給它做個標記,那麼放入盒子i中的物體雖然不可區分,但是仍然有標記i,這樣,我們將k個不可區分的物件放入n個可以區分的盒子中就相當於從n個盒子中取出總共k個物件一樣,是不是很眼熟?猜對了,公式就是c(n+k-1,k),這與允許重複的組合公式是一樣的。最後兩類盒子模型是(3)「不可區分的物件放入不可取分的盒子」和(4)「可區分的物件放入不可取分的盒子」,前者用到了第二類stirling數,後者用到了n的最多k次劃分,不存在具體的公式。
整個基本的組合計數,也就是這麼多了,在此之上還有高階的計數計數,包括容斥原理和生成函式什麼的,在第七章介紹。
離散數學及其應用 ch7 高階計數
在第五章學習了基本的組合計數知識後,我們終於在第七章迎來了更高階的組合計數知識,把這章介紹的內容與第五章的內容合併起來,就形成了我們的組合數學工具箱,可以解決一大堆計數問題了,在計算機程式設計過程中很多問題其實都可以用計數模型進行建模,那麼乙個好的組合計數基本功當然是必不可少的了。下面我們就來總結一...
離散數學及其應用 前言
1.書中原話什麼是離散數學?離散數學是數學中研究離散物件的部分。這裡 離散 的含義是 由不同的或不相連的元素組成 離散數學解決的問題包括 你們將學習解決諸如以上問題要用到的離散結構和技術。更一般地,在對物件進行技術時要用到離散數學,研究兩個有限 或可數 集合之間的關係是要用到理順數學,分析只含有限步...
離散數學及其應用 ch1邏輯與證明
邏輯與證明 這一章就講了三個故事 命題邏輯 謂詞邏輯和數學證明。邏輯是數學推理的基礎,也是這門學科的基礎,以後我們在演算法和電腦程式中會大量用到證明,這章主要介紹邏輯和證明的各種工具,方法,策略。一.命題邏輯 1.1節和1.2節介紹了命題邏輯,首先我們要搞清楚 命題 的概念,命題 是一種宣告性的句子...