組合數學
- 組合數學
- 寫在前面
- 計數原理
- 組合問題分類
- 排列
- 組合
- Lucas 定理
- 組合數學的一些思想方法
- 幾個問題
- 組合數及其相關性質
- $C_{n+m}^{n} = C_{n+m}^m$
- $C_{n}^{m} = C_{n - 1}^{m - 1} + C_{n - 1}^{m}$
- $C_{n+r+1}^{r} = C_{n+r}^{r} + C_{n + r-1}^{r-1} + ... + C_{n}^{0}$
- $C_{n}{l}C_{l}{r} = C_{n}{r}C_{n-r}{l-r}$
- $C_{n}^{0} + C_{n}^{1} + ... + C_{n}^{n} = 2^n$
- $C_{n}^{0} - C_{n}^{1} + C_{n}^{2} - ... = 0$
- $C_{r}^{r} + C_{r+1}^{r} + ... + C_{n}^{r} = C_{n + 1}^{r + 1}$
- 二項式定理
寫在前面
題做不動了,來寫點筆記
計數原理
抽屜原理
把 \(n + 1\) 件物品放入 \(n\) 個抽屜里,至少有一個抽屜放了 \(2\) 個物品
這不是很顯然?
容斥原理
在計數時,必須注意沒有重復,沒有遺漏。為了使重疊部分不被重復計算,人們研究出一種新的計數方法,這種方法的基本思想是:先不考慮重疊的情況,把包含於某內容中的所有對象的數目先計算出來,然后再把計數時重復計算的數目排斥出去,使得計算的結果既無遺漏又無重復,這種計數的方法稱為容斥原理。——百度百科
類似於去交集並集之類的。功能很明確,計數時沒有重復沒有遺漏,結合實際問題可能要復雜些,腦子不夠用
組合問題分類
具體分為四種:
- 存在性問題:判斷滿足某種條件的情況或狀態是否存在
- 計數性問題:存在多少種滿足某種條件的情況或狀態
- 構造性問題:如果以判斷出滿足某種條件的狀態是存在的,那么如何構造出來
- 最優化問題:找出某種評價標准下的最佳(或較佳)構造方案
排列
\(n\) 個物品中選 \(k\) 個物品的方案數,(先后順序不同為兩種方案)
圓排列
\(n\) 個物品中選 \(k\) 個不分首尾的圍成一個圓圈
方案數為:
組合
\(n\) 個物品中選 \(k\) 個,(先后順序不同為一種方案)
定義式:
或者
Lucas 定理
就是一個公式:
也可以寫作:
其中 \(Lucas(n, 0) = 1\) ,利用這個在遞歸的時候返回即可
一般應用於 \(n\) 和 \(m\) 很大的時候,可以大大簡化運算,但要注意 \(p\) 必須是質數
如果模數不是很大,可以預處理出 \(1 \sim mod - 1\) 的階乘和逆元進行優化
組合數學的一些思想方法
插板法
一個典型的例子
把 \(n\) 個小球放進 \(k\) 個箱子里,求有多少種放法
- 空隙間必須有值的情況(每個箱子里至少有一個球):
考慮將 \(n\) 個小球排成一列,每兩個小球間會有一個空隙,一共有 \(n - 1\) 個空隙。把箱子看成板子,插入空隙里,顯然只要插 \(k - 1\) 個板子就能把小球分成 \(n\) 份,所以答案為
- 空隙間可以為空的情況(箱子里可以不放球):
與上面不同的是,兩個板子可以同時插在一個地方,所以相當於多了 \(k\) 個可以插的地方,所以答案為:
幾個問題
Question 1
有 \(n\) 個不同元素,選 \(r\) 個,可重復選,求方案數
求證: \(ans = C_{n + r - 1}^{r}\)
思路:
設當 \(n\) 個元素中選 \(r\) 個不重復的元素時
那么當從 \(n\) 個元素中選 \(r\) 個可重復的元素時
設 \(y_i = x_i + i - 1\)
那么上式可表示為
發現與第一個不等式形式相同,所以答案類似是 \(C_{n + r - 1}^{r}\)
因為對於每個 \(x_i\) 都有唯一的 \(y_i\) 與之對應,所以問題的答案也為 \(C_{n + r - 1}^{r}\)
證畢。
Question 2
有 \(n\) 個元素,從中選 \(r\) 個不相鄰的元素,求方案數
求證: \(ans = C_{n - r + 1}^{r}\)
思路同 Question 1, 把 \(y_i = x_i + i - 1\) 改為 \(y_i = x_i - i + 1\),用相同的思路去推導即可
Question 3
求
\[\sum_{k=1}^{n}(C_{n}^{k})^2 \]
解:
然后就做完了。
這樣做的意義是啥?
這就是在前 \(n\) 個元素中選 \(k\) 個,在后 \(n\) 個元素中選 \(n - k\) 個(選 \(k\) 個和選 \(n -k\) 個是一個意思)的方案數
為什么 \(C_{2n}^{2k}\) 不對?
因為這樣你無法確定在前 \(n\) 個元素中選擇了幾個,在后 \(n\) 個元素中選擇了幾個
組合數及其相關性質
\(C_{n+m}^{n} = C_{n+m}^m\)
實際意義:從 \(n+m\) 個元素中選 \(n\) 個元素的方案數與選 \(m\) 個元素 剩下 \(n\) 個元素的方案數相同
\(C_{n}^{m} = C_{n - 1}^{m - 1} + C_{n - 1}^{m}\)
暴力推導:
對左式進行通分合並就可以得到右式了
過程也很簡單,在這里就不贅述了
實際意義:從 \(n\) 個里面選 \(m\) 個,對於最后一個元素,我們考慮兩種情況:選或不選。如果選,那么還要在剩下的 \(n - 1\) 個元素中選擇 \(m - 1\) 個元素;如果不選,那么還要在剩下的 \(n - 1\) 個元素中選擇 \(m\) 個元素。
兩種情況是並列的,因此把兩種情況的方案數加起來即可。
其實這個式子還有另外一個名字:組合數的遞推式。
也就是你可以從 \(C_{1}^{1}\) 采用遞推的方式推到 \(C_{n}^{m}\)
如果你把整個遞推出來的三角形列出來的話,會發現這是一個楊輝三角
各位有興趣的話可以稍微在打草紙上一划,就很容易看出
\(C_{n+r+1}^{r} = C_{n+r}^{r} + C_{n + r-1}^{r-1} + ... + C_{n}^{0}\)
這個式子其實可以從上面那個式子進行更進一步的推導推出來
即來考慮更多的元素是否選擇的情況
\(C_{n}^{l}C_{l}^{r} = C_{n}^{r}C_{n-r}^{l-r}\)
實際意義:在 \(n\) 個元素中先選 \(l\) 個元素,再在這 \(l\) 個元素中選 \(r\) 個元素的方案 等於 在 \(n\) 個元素中先選 \(r\) 個元素,再在剩下的 \(n - r\) 個元素中選擇 \(l - r\) 個元素的方案。因為兩次操作是遞進的(或者說有先后的),所以計算的時候是相乘的形式,也就是上面的捏個等式
\(C_{n}^{0} + C_{n}^{1} + ... + C_{n}^{n} = 2^n\)
含義: \(n\) 個元素,從中選任意個元素的方案數。
考慮對每個元素選或不選,對於每個元素都有兩條路可走,所以 \(n\) 個元素隨便選或不選的方案數為 \(2^n\)
另一個含義:把 \(n\) 個元素看做一個長度為 \(n\) 的 01 串,那么這個串中的 \(1\) 的個數對應着每種方案(或是 \(0\) 的個數),又因為這個 01 串能表示的數有 \(0 \to 2^n - 1\) 共 \(2^n\) 個數,所以上式的方案數為 \(2^n\).
\(C_{n}^{0} - C_{n}^{1} + C_{n}^{2} - ... = 0\)
一種理解方式:上面的式子可以看做從 \(n\) 個元素中選 偶數 個和選 奇數 個的方案是一樣的。考慮一個新加的東西選或不選,如果選的話,肯定會由原來的 奇數個 變成 偶數個 (或者 偶數個 變成 奇數個);如果不選的話,就不發生改變。因為兩種情況是等概率出現的,因此從 \(n\) 個元素中選 奇數個 和選 偶數個 的方案數相同
\(C_{r}^{r} + C_{r+1}^{r} + ... + C_{n}^{r} = C_{n + 1}^{r + 1}\)
好像和上面某個式子的推導思想一樣來
二項式定理
\[(x+y)^n = \sum_{i = 0}^{n}C_{n}^{i} x^i y^{n-i} = \sum_{i = 0}^{n}C_{n}^{i} x^{n-i} y^i \]