1. 程式人生 > 其它 >日期時間工具類

日期時間工具類

組合數學學習筆記

前言:

學校網掛掉了,無聊至極,跑來學組合數了。

來自《組合數學》第四版

章節是原書的,以下內容 Ariel 認為還是比較 noip 的

不 noip 的也幹不動啊= =

目錄:

目錄

第一章 組合數學

組合數學涉及將一個集合的物體排列成滿足一些指定規則的格式。

如下兩類一般性問題反覆出現

  • 組合的存在性
  • 排列的計數和分類

與上述問題同時出現的另外兩種組合數學問題是:

  • 研究一個已知的排列
  • 構造一個最優的排列

1.1 棋盤的完美覆蓋

問題描述

考慮一張 \(8 \times 8\) 的棋盤。設有形狀一樣的多米諾骨牌,每張牌恰好覆蓋棋盤上相鄰的兩個方格。是否能夠把 \(32\) 張多米諾牌放在棋盤上,使得任意兩張多米多骨牌均不重疊,每張多米諾牌覆蓋兩個方格,並且棋盤上所有的方格都被覆蓋住。

分析

存在性

\(m\)\(n\) 至少一個是偶數時,\(m\times n\) 存在完美覆蓋。

方案數

\(m\times n\) 棋盤的不同完美覆蓋數,這個問題等價於分子物理學中的二聚物問題;

Fischer 已經得出涉及三角函式的用來計算 \(m\times n\) 棋盤不同完美覆蓋數的一般公式

特殊的,當 \(n = 2\) 的時候,可以用遞推求解,遞推公式就是斐波那契數列。

裁剪後的存在性

考慮 \(8\times 8\) 的國際棋盤用一把剪刀剪掉對角線上的兩個格子,總共剩 \(62\) 個方格,問此時是否能夠排列 \(31\) 張多米諾骨牌得出完美覆蓋?

它不存在完美覆蓋。

證明:將 \(8\times 8\) 的棋盤上交替地將放個塗成黑色和白色,其中 \(32\) 個方格是白色,而另外 \(32\)

個方格是黑色的,如果剪掉棋盤一副對角線上的兩個方格,那麼我們就剪掉了同樣顏色的兩個格子,比如兩個白色的方格。這樣就變成了\(32\) 個黑方格和 \(30\) 個白方格,但是每個多米諾骨牌需要一個黑格子和一個白格子,所以沒有完美覆蓋。

切過的棋盤怎麼才會存在完美覆蓋 ?

一個必要條件就是黑格子等於白格子。

充分條件是二分圖的匹配問題。

擴充套件

\(b\) 是一個正整數,用 \(b\)\(1\times 1\) 的方格並排成 \(1 \times b\) 的方格條來代替多米諾牌,我們稱這些方格條是 \(b\) 牌。

\(m\times n\) 的棋盤被 \(b\) 的一個完美覆蓋 ?

充分條件是 \(b\)\(m\) 的一個因子或 \(b\)\(n\) 的一個因子。這個應該很顯然。

同時它也是一個必要條件。

證明要對 \(b\) 是否為素數分類討論。

素數由素數基本性質就能得出來,不是素數的證明有點麻煩。

所以就了結論:

一張 m 行 n 列棋盤有一個 b-牌的完美覆蓋,當且僅當b是 m的一個因子或者 b 是 n 的一個因子

同時如果完美覆蓋中所有的 b-牌都是水平擺放或者所有的 b-牌都是垂直襬放,則稱其為平凡的,如果一個完美覆蓋是可能的,那麼一個平凡覆蓋也是可能的。

1.2 Nim 取子游戲

問題描述

\(k\) 堆石子,每堆石子都有 \(n_i\) 石子,每一輪一個人可以任意選取一堆石子,然後取走任意數量的石子,最後不能取的那個人為敗者。

分析

先考慮兩堆石子的情況:

如果兩堆石子數量相同,先手取一定數量的棋子,後手也在另一堆棋子中取走相同數量的棋子,後手一直採取這個策略,那麼它是必勝的。

如果兩堆石子不同,先手一定會採取策略使得兩堆棋子數量相同,這時先手必勝。

這麼就有了,若兩堆石子初始相等那麼後手必勝,否則先手必勝。

推廣到 \(k\) 堆的情況下

現在考慮的大堆的個數為 \(N_1, N_2, N_k\) 的取石子游戲,N_i 表示二進位制數。

\(N_1 = a_s\dots a_1 a_0\)
\(N_2 = b_s \dots b_1b_0\)
\(N_k = m_s\dots m_1m_0\)

如果每種大小的子堆的個數都是偶數,那麼就稱 Nim 取子游戲是平衡的,而對應位相加為偶數的成為平衡位,否則為非平衡位,\(Nim\) 取子游戲是平衡的當且僅當

\(a_s + b_s\dots m_s\) 是偶數。
\(\dots\)
\(a_0 + b_0 + \dots m_0\) 是偶數。

先手能夠在非平衡的遊戲中取勝,後手能在平衡的遊戲中取勝。

對應的就是所有的數異或起來為 \(0\) 就是平衡狀態,否則為非平衡狀態。

第二章 鴿巢原理

簡單形式

2.1.1:如果 n + 1 個物體被放到 n 個盒子,那麼至少有一個盒子包含兩個或更多的物體

證明:無證明。

還有兩種形式,也很簡單:

  • 如果將 \(n\) 個物體放入 \(n\) 個盒子並且沒有一個盒子是空的,那麼每個盒子恰好包含一個物體
  • 如果將 \(n\) 個物體放入 \(n\) 個盒子並且沒有盒子放入對於一個物體,那麼每個盒子裡有一個物體。

鴿巢定理進階

2.2.1 令 \(q_1, q_2, q_3, q_n\)為正整數。如果將

\[q_1 + q_2 \dots q_n - n + 1 \]

個物體放入 n 個盒子內,那麼,或者第一個盒子至少含有\(q_1\) 個物體,或者第二個盒子至少含有 \(q_2\) 個物體,或者第 n 個盒子至少含有 \(q_n\) 個物體。

證明: 設將 \(q_1 + q_2 + \dots q_n - n + 1\) 個物品放到 \(n\) 個盒子中。如果對於每個 \(i = 1, 2, \dots n\) ,第 \(i\) 個盒子含有少於 \(q_i\) 個物品,那麼所有盒子中的物品的總數不超過

\[(q_1 - 1) + (q_2 - 1) +\dots + (q_n - 1) = q_1 + \dots q_n - n \]

因為發的物品少 1, 因此我們斷言,對於某一個 \(i = 1, 2, \dots n\), 第 \(i\) 個盒子至少包含 \(q_i\) 個物品。

所以當將 \(q_1 + q_2 + q_n - n\) 個物品用上面的方法分到 \(n\) 個盒子中,所有的盒子都不能含有 \(q_i\) 個或更多的物品。而上上面的那個簡單定理就是這個 \(q_i = 2\) 的一種特殊形式。

平均原理

如果 \(n\) 個非負整數 \(m_1, m_2\dots m_n\) 的平均數大於\(r - 1\)

\[\frac{m_1 + m_2 + \dots m_n}{n} > r - 1 \]

那麼至少有一個整數大於或等於 \(r\)

如果 \(n\) 個非負整數 \(m_1, m_2, \dots m_n\) 的平均數小於 \(r + 1\)

\[\frac{m_1 + m_2 + \dots m_n}{n} < r + 1 \]

那麼其中至少有一個整數小於 \(r + 1\)

如果 \(n\) 個非負整 \(m_1, m_2, \dots m_n\) 的平均數至少等於 \(r\), 那麼這 \(n\) 個整數 \(m_1, m_2, \dots m_n\) 至少有一個滿足 \(m_i \geq r\)

Ramsey 定理

一個完全圖(頂點數至少為 \(6\) ),將每條邊染成紅色或者藍色,一定會找出一個全藍或者全紅的三角形。

第三章 排列與組合

3.1 四個基本的計數原理

加法原理,乘法原理,減法原理,除法原理。

3.2 集合的排列

\(A_n^m = \frac{n!}{(n - m)!}\)

\(A_n^n = n!\)

\(n\) 個元素的集合的迴圈 \(r\) 的排列的個數為

\[\frac{A_n^r}{r} = \frac{n!}{r\times (n - r)!} \]

可以這麼理解:
一個環從每個點切開,就會對應這 \(r\) 個不同的排列。

3.3 集合的組合

定理 3.3.1

對於 \(0\leq m \leq n\)

\(A_n^m = m! \times {n\choose m}\) 得到 \({n \choose m} = \frac{n!}{m!(n - m)!}\)

定理 3.3.2

對於 \(0 \leq m \leq n\)

\(C_n^m = C_n^{n - m}\)

3.4 多重集的排列

如果 \(S\) 是一個多重集,那麼 \(S\) 的一個 \(r-\) 排列的一個有序排放。如果 \(S\) 的元素總個數是 \(n\) (包括計算重複元素),那麼 \(S\)\(n-\)排列也將成為 \(S\) 的排列。

定理 3.4.1

\(S\) 是一個多重集,它有 \(k\) 個不同型別的元素,每個元素都有無限重複次數。那麼,\(S\)\(r-\)排列的個數為 \(k^r\)

證明:乘法原理就好了。

定理 3.4.2

\(S\) 是一個多重集合,有 \(k\) 個不同型別的元素,各元素的重數分別為 \(n_1, n_2, \dots n_k\) 。設 \(S\) 的大小為 \(n = n_1 + n_2 + \dots +n_k\)。則 \(S\) 的排列數等於

\[\frac{n!}{n_1!n_2!\dots n_k!} \]

證明:

考慮先把 \(n_1\)\(a_1\) 填進去,很顯然有 \(C_n^{n_1}\) 種方案,然後再填 \(a_2\) ,有 \(C_{n - n_1}^{n_2}\) 種方案,一直下去,排列的總數就是

\[C_n^{n_1} + C_{n - n_1}^{n_2} + C_{n_3}^{n - n_1 - n_2} \dots + C_{n - n_1 - n_{k - 1}}^{n_k} \]\[\frac{n!}{n_1!(n - n_1)!}\times \frac{(n - n_1)!}{n_2!(n - n_1 - n_2)!} \times \dots \times \frac{(n - n_1 - n_2 -\dots n_{k - 1})!}{n_k!(n - n_1 - n_2 - \dots n_{k - 1})!} \]

然後化簡就得到上面那個式子了。

定理 3.4.3

\(n\) 是一個正整數,並令 \(n_1, n_2, \dots n_k\) 是正整數,且 \(n = n_1 + n_2 + \dots + n_k\)。將 \(n\) 個元素的集合劃分成 \(k\) 個被做標籤的盒子 \(B_1, B_2, \dots B_k\) 的方案數為:

\[\frac{n!}{n_1! n_2! \dots n_k!} \]

其中盒 \(1\) 含有 \(n_1\) 個元素,盒 \(2\) 含有 \(n_2\) 個元素,\(\dots\)\(k\)\(n_k\) 個元素。如果這些盒子不被做標籤,那麼劃分的個數為

\[\frac{n!}{k!n_1!n_2!\dots n_k!} \]

證明:先選 \(n_1\) 個元素放入第一個盒子,然後從 \(n - n_1\) 個元素中取 \(n_2\) 個元素放入第 2 個盒子 \(\dots\)

然後就有

\[C_n^{n_1} C_{n - n_1}^{n_2}\dots C_{n - n_1- n_2 - \dots - n_{k - 1}}^{n_k} \]

同 3.4.2 的化簡得到

\[\frac{n!}{n_1 ! n_2!\dots n_k!} \]

現在對這些盒子不做標籤。因為對於把元素放入 \(k\) 個無標籤盒子的每一種方法,現在存在 \(k!\) 種方法將標籤 \(1, 2, \dots, k\) 貼在盒子上。

因此劃分的個數為

\[\frac{n!}{k!n_1!n_2!\dots n_k!} \]

3.5 多重集的組合

定理 3.5.1

\(S\) 為具有 \(k\) 種類型元素的一個多重集,每種元素均具有無限的重複,則 \(S\) 的 r-組合的個數等於

\[{{r + k - 1} \choose {r}} = {{r + k - 1} \choose k - 1} \]

證明:

\(S\)\(k\) 種類型的元素為 \(a_1, a_2, \dots , a_k\)

\(S = \{\infty a_1, \infty a_2, \infty a_3 \dots \infty a_k\}\)

任意一個 r-組合均呈 \(\{x_1 a_1 + x_2 a_2\dots x_k a_k\}\)

那麼 r-組合的個數等於方程 \(x_1 + x_2 + \dots +x_k = r\) 的解的個數。

我們證明這些解的個數等於兩種不同型別的元素的解的個數等於兩種不同型別元素的多重集

\(T = \{r\times 1 + (k - 1) \times *\}\)

的排列的個數。給定 \(T\) 的一個排列,\(k - 1\) 個 * 把 \(r\)\(1\) 分成 \(k\) 組。設第一個 * 左邊有 \(x_1\) 個 1,第二個 * 和第三個 * 之間有 \(x_2\)\(1\)\(\dots\) 最後一個 * 的右邊有 \(x_k\) 個 1。

這樣很顯然 \(x_1 + x_2 + \dots x_k = r\)

於是多重集合 \(S\) 的 r-組合個數等於多重集合 \(T\) 的排列個數。

\[\frac{(r + k - 1)!}{r!(k - 1)!} = {{r + k - 1}\choose {r}} \]

第六章 容斥原理

6.1 容斥原理

定理 6.1.1\(S\) 的不具有性質 \(P_1, P_2, \dots P_m\) 的物體的個數由下式給出。

\[|\overline A_1 \bigcap \overline A_2 \dots \bigcap \overline A_m| = |S| - \sum|A_i| + \sum|A_i \bigcap A_j| - \sum|A_i \bigcap A_j \bigcap A_k| \dots (-1)^m |A_1 \bigcap A_2 \bigcap \dots A_m| \]

定理 6.1.2

至少具性質 \(P_1, P_2 \dots P_m\) 之一的集合 \(S\) 的物體的個數為

\[|A_1 \bigcup A_2\dots \bigcup A_m| = \sum|A_i| - \sum |A_i \bigcap A_j| + \sum{|A_i\bigcap A_j \bigcap A_k|} \dots (-1)^{m + 1}|A_1\bigcap A_2 \dots \bigcap A_m| \]

6.2 具有重複的組合

\[{r + k - 1\choose r} \]

6.3 錯位排列

咕咕

6.4 帶有禁止位置的排列

咕咕

6.5 另外的禁排位置問題

咕咕