4.3 買票找零問題
阿新 • • 發佈:2020-11-26
4.3 買票找零問題
基礎問題:在一場激烈的足球賽開始前,售票工作正在緊張的進行中。每一張球票為50元。現在有2n個人排隊購票,其中有n個人手持50元的鈔票,另外n個人手持100元的鈔票,假設開始售票時,售票處沒有零錢.問這2n個人有多少種排隊方式,不至於售票處出現找不開錢的局面?
\[res = C_{2n}^n - C_{2n}^{n-1} = \frac{1}{n+1}C_{2n}^n \]answer
Catalan 數
先介紹卡特蘭數:
- Catalan 滿足遞迴式:\(h(n) = h(0) * h(n-1) + h(1) * h(n-2) + ...+h(n-1) * h(0)\)
- Catalan 另類遞推式:\(h(n) = \frac{h(n-1) * (4*n-2)}{n+1}\)
- 遞推關係的解為:\(C_n = C_{2n}^n - C_{2n}^{n+1} = \frac{1}{n+1}C_{2n}^n\)
卡特蘭數的證明:
給出一個n,要求一個長度為2n的0,1序列,使得序列的任意字首中1的個數不少於0的個數
證明:
考慮一個含有n個1,n個0的2n位二進位制數字,掃描到第2m+1位上的時候有m+1個0和m個1,則後面0,1 的個數分別為:有n-m個1和n-m-1個0,
將2m+2以及之後的0變成1,1變成0,則對應一個n+1個0和n-1個1的二進位制數,不符合要求
從而\(C_n = C_n = C_{2n}^n - C_{2n}^{n+1} = \frac{1}{n+1}C_{2n}^n\)
拓展問題:
1 矩陣連乘問題:\(P = a_1 * a_2 * a_3 * ... * a_n\)依據乘法結合律,不改變矩陣的相互順序,只用括號表示成對的乘積,試問有幾種括號化的方案?
左括號相當於1,右括號相當於0,本質上就是卡特蘭數
2 將多邊形劃分稱為三角形問題。求一個凸多邊形區域劃分稱為三角形區域的方法數。
我們從節點1開始考慮,要想分割成為三角形區域,節點1不能和他相鄰的節點相連,所以節點1可以連線3,4...n-1
我們假設節點1連線i,則這條線將多邊形區域分割成為i凸多邊形和N+2-i凸多邊形,即對於節點1,\(f_1(n) = f(3)*f(n+2-3) + ... + f(n-1)f(3)\)
總的分割方法是\(N*f_1(n)\),其中一半是重複情況 \[f(n) = \sum_{i=3}^{n-1}f(i)*f(n+2-i)*\frac{n}{2} \]
3 某一個城市的某個居民,每一天他需要走2n個街區去上班(他在其住所北n個街區和以東n個街區工作)。如果他從不穿越從家到公司的對角線,那麼有多少條可能的道路?
符合卡特蘭數
4 在圓上選擇2n個點,將這些點成對連線起來,求使所得到的n條線段不相交的方法數?
類似於拓展2
5 n個節點可以構造出多少不同的二叉樹?
n = 0 , f(0) = 1
n = 1 , f(1) = 1
n = 2 , f(2) = 4
其中\(f(i)*f(n-i-1)表示左子樹有i個節點右子樹有n-i-1個節點時候可構造的數目\)
符合卡特蘭數
// 4.3 買票找零
// 卡特蘭數
class Test{
public static void main(String[] args) {
/**
基礎問題:
在一場激烈的足球賽開始前,售票工作正在緊張的進行中。每一張球票為50元。現在有2n個人排隊購票,其中有n個人手持50元的鈔票,另外n個人手持100元的鈔票,假設開始售票時,售票處沒有零錢。
問這2n個人有多少種排隊方式,不至於售票處出現找不開錢的局面?
answer
$$res = C_{2n}^n - C_{2n}^{n-1} = \frac{1}{n+1}C_{2n}^n$$
*/
/**
先介紹卡特蘭數:
Catalan 滿足遞迴式:$h(n) = h(0) * h(n-1) + h(1) * h(n-2) + ...+h(n-1) * h(0)$
Catalan 另類遞推式:$h(n) = \frac{h(n-1) * (4*n-2)}{n+1}$
遞推關係的解為:$C_n = C_{2n}^n - C_{2n}^{n+1} = \frac{1}{n+1}C_{2n}^n$
卡特蘭數的證明:
給出一個n,要求一個長度為2n的0,1序列,使得序列的任意字首中1的個數不少於0的個數
證明:
考慮一個含有n個1,n個0的2n位二進位制數字,掃描到第2m+1位上的時候有m+1個0和m個1,則後面0,1 的個數分別為:有n-m個1和n-m-1個0,
將2m+2以及之後的0變成1,1變成0,則對應一個n+1個0和n-1個1的二進位制數,不符合要求
從而$C_n = C_n = C_{2n}^n - C_{2n}^{n+1} = \frac{1}{n+1}C_{2n}^n$
*/
/**
拓展問題:
1 矩陣連乘問題:$P = a_1 * a_2 * a_3 * ... * a_n$依據乘法結合律,不改變矩陣的相互順序,只用括號表示成對的乘積,試問有幾種括號化的方案?
左括號相當於1,右括號相當於0,本質上就是卡特蘭數
2 將多邊形劃分稱為三角形問題。求一個凸多邊形區域劃分稱為三角形區域的方法數。
我們從節點1開始考慮,要想分割成為三角形區域,節點1不能和他相鄰的節點相連,所以節點1可以連線3,4...n-1
我們假設節點1連線i,則這條線將多邊形區域分割成為i凸多邊形和N+2-i凸多邊形,即對於節點1,$f_1(n) = f(3)*f(n+2-3) + ... + f(n-1)f(3)$
總的分割方法是$N*f_1(n)$,其中一半是重複情況
$$f(n) = \sum_{i=3}^{n-1}f(i)*f(n+2-i)*\frac{n}{2}$$
3 某一個城市的某個居民,每一天他需要走2n個街區去上班(他在其住所北n個街區和以東n個街區工作)。如果他從不穿越從家到公司的對角線,那麼有多少條可能的道路?
符合卡特蘭數
4 在圓上選擇2n個點,將這些點成對連線起來,求使所得到的n條線段不相交的方法數?
類似於拓展2
5 n個節點可以構造出多少不同的二叉樹?
n = 0 , f(0) = 1
n = 1 , f(1) = 1
n = 2 , f(2) = 4
$$f(n) = f(0)*f(n-1) + f(1)*f(n-2) + ... + f(i)*f(n-i-1) + ... + f(n-1) * f(0)$$
其中$f(i)*f(n-i-1)表示左子樹有i個節點右子樹有n-i-1個節點時候可構造的數目$
符合卡特蘭數
*/
}
}