河內塔問題
有 \(3\) 根柱子和 \(n\) 個圓盤,我們可以把最頂上的圓盤移到另外的柱子上,但不可以把大的圓盤放在小的圓盤上面
問,最少需要多少步才能把所有圓盤從一根柱子移到另外一跟柱子上
我們先命名一個狀態 \(T_n\) 表示圓盤從一根柱子移動到另外一根柱子的最少次數
那麼我們思考一種移動方案,假設我們要把圓盤從 \(A\) 柱移動到 \(B\) 柱上
那麼我們可以將 \(n-1\) 個圓盤移動 \(C\) 柱上 然後把最下面的圓盤移動到 \(B\) 柱上,最後把 \(n-1\) 個圓盤從 \(C\) 柱移到 \(B\) 柱,所以,我們能得到方程
我們想要得到通項公式,可以盲猜結論 \(T_n = 2^n -1,n \ge 0\)
可以用數學歸納法證明
- \(n=1\) 時等式成立
- \(n\ge 1\)時,假設 \(T_{n-1} = 2^{n-1}-1\) 成立,可得
證畢
平面上的直線
平面上 \(n\) 條直線所界定的區域最大個數 \(L_n\) 是多少
我們考慮假設已經有\(n-1\) 條直線,我們需要畫一條直線,這條直線最多和 \(n-1\) 條直線相交產生 \(n\) 個新的區域
所以我們得到了
很容易我們可以得出 \(L_n=\frac{n(n+1)}{2}+1,n \ge0\)
考慮一個變形,平面上由 \(n\) 條這樣的折線所界定區域的最大的個數 \(Z_n\) 是多少
考慮一個折線可以看作兩條直線擦掉一半,對於每個折線,我們都失去了 \(2\) 塊區域
所以
約瑟夫問題
從圍成標有記號的 \(1\) 到 \(n\) 的 \(n\) 個人開始,每隔一個刪去一個人,直到有一個人倖存下來
\(n=10\) 時,消去的人時 \(2,4,6,8,10,7,1,9\) 最後 \(5\) 倖存
我們由此能得到幾個規律:
- 每一輪殺人,殺一半,向下取整,偶數編號的人會被殺
- 倖存的人,重新編號
遞迴表示式
每輪殺人,編號減半,那麼最後肯定剩下一個人,我們能不能從第 \(k\) 輪活下來的那個人的編號反推出第 \(k-1\) 輪活下來的那個人的編號呢?
設 \(n\) 個人時的倖存的號碼為 \(J(n)\)
-
先考慮偶數的情況,第一圈把偶數的去掉,奇數留下來,假設一開始有 \(2n\) 個人,第一輪後就是
所以我們得到了一個子問題,用遞迴的思想,假設子問題以及求解完成了,我們可以得到表示式 \(J(2n)=2J(n)-1,n\ge1\),也就是說,存活的那個人的編號是子問題的答案的編號的兩倍減一 -
然後考慮奇數,對於 \(2n+1\) 個人
我們得到 \(J(2n+1)=2J(n)+1\)
所以我們得到了表示式
我們透過這個式子就可以快速得到答案了
接下來嘗試把遞迴式子轉化為非遞迴的形式
二進位制形式性質
有了遞迴式,我們能做出一張表:
顯然可以看出,\(J(n)\) 按照 \(2^m\) 為分段,段內為一個等差數列,於是我們能寫出 \(J(n)\) 的封閉形式,設 \(n=2^m+l\),則:
我們把 \(n\) 轉化成二進位制會發現更多規律,不妨設 \(n=(b_mb_{m-1}\cdots b_1b_0)\)
由於首位字母 \(b_m\) 必為 \(1\),所以 \(n=(1b_{m-1}\cdots b_1b_0)\),那麼 \(l=(b_{m-1}\cdots b_1b_0)\)
所以 \(J(n)=2l+1=(b_{m-1}b_{m-2}\cdots b_01)=(b_{m-1}b_{m-2}\cdots b_0b_m)\)
用計算機程式設計的行話說就是,\(n\) 向左迴圈移動一位就得到 \(J(n)\)
成套方法
我們嘗試把 \(J\) 函式進行擴充,有一個類似於 \(J\) 的遞迴式,引入常數 \(\alpha\)
我們可以構造出如下表:
可以觀察出 \(\alpha\) 的係數是不超過 \(n\) 的 \(2\) 的最大冪,\(\beta\) 的係數遞減 \(1\) ,\(\gamma\) 的係數遞增 \(1\)
我們可以得到 \(f(n)\) 的封閉形式:
且我們觀察出
這裡可以使用數學歸納法證明,但是也可以採用特殊值法來證明,書上把這種方法稱為成套方法
由於 \(A(n),B(n),C(n)\) 的關係在任何情況下都是固定的,所以理論上來說 \(\alpha,\beta,\gamma\) 可以取任意值
不妨取 \((\alpha,\beta,\gamma)=(1,0,0)\),\(f(n)=A(n)\),由:
很顯然可以得到 \(A(n)=f(n)=2^m\)
我們還可以設 \(f(n)=1\),有:
解出來得到 \((\alpha,\beta,\gamma)=(1,-1,-1)\),於是得到了一個關係式 \(1=A(n)-B(n)-C(n)\)
然後設 \(f(n)=n\),有:
解出來得到 \((\alpha,\beta,\gamma)=(1,0,1)\),於是得到了一個關係式 \(n=A(n)+C(n)\)
聯立三個式子:
於是 \(B(n)=2^m-1-l,C(n)=l\) 就可以被解出來了,這就是成套方法
有多少個獨立的引數,我們就需要多少個特殊的值,本題中有三個 \((\alpha,\beta,\gamma)\)
推廣的約瑟夫遞迴式
前面我們得到了一個二進位制下迴圈移位的性質,那麼推廣的約瑟夫表示式是否也有類似的性質呢?
推廣的遞迴式的形式如下:
展開就是
所以我們可以解除二進位制的限制,這裡的 \(b_i\) 一點是 \(0,1\) ,但 \(\beta_j\) 可以不為 \(0,1\)
我們把上面的表格換一種形式就可以看出
完全符合上面的形式,這裡的 \(\beta = \beta_0, \alpha = \gamma\)
於是,我們可以考慮推廣基數,這裡我們設基數為 \(d\)
這個的解是:
例如,我們有遞迴式:
假設我們這裡要計算 \(f(19)\),有 \(d=3\) ,\(c=10\) ,我們可以把 \(19\) 轉化成三進位制 \((201)_3\) ,這裡的 \(\alpha_1=2,\beta_0=76,beta_1=-2\),所以 \(f(19)=f((201)_3)=(5\ 76\ -2)_{10}=500 + 760 - 2 = 1258\)