《具体数学》果真十分“具体”,远没有数学分析、高等代数那么“抽象”。这里记录了我在阅读这本书时所采撷的“心动瞬间”——这些数学公式真是令人心动——可以把这篇文章当做检索目录,遇到问题时:1、Ctrl+F;2、找到对应章节后翻书。
递归问题
河内塔问题
如何确定递归式?
记\(T_n\)表示\(n\)个圆盘的最小步数
\(T_n \le 2 T_{n-1} + 1\), 可以构造;
\(T_n \ge 2T_{n-1} + 1\),要把最大一个拿出来至少要\(T_{n-1}+1\),把剩下的移动正确位置,至少需要\(T_{n-1}\)。
如何求出封闭形式?
数学归纳,假设\(T_n = 2^n - 1\)。
暴力求解,记\(U_n = T_n + 1\),则\(U_n = 2U_{n-1} = 2^n\),从而解出\(T_n\)。
平面上的直线
欧拉公式:F = 1 + E - V
每加入一条边,F先+1;每多出一个交点,就会多两条边,从而F又+1.
目标是最大化交点的数量。
切\(n\)刀,最多把披萨分成几块?
- 只要所有直线都不平行,第\(i\)条直线可以和之前\(i-1\)条直线相交,从而F加\(i\).
\(n\)条折线呢?
每一对折线可以产生\(4\)个顶点,自己本身可以产生1个,初始有1个。
\(4 \frac{n(n-1)}{2} + n + 1 = 2n^2 - n + 1\)
\(n\)个120°三叉呢?
- 每对可以产生3个,自己本身可以多2个,初始有1个。
约瑟夫问题
每隔2个干掉一个?
递归,第一轮会把所有偶数位置都干掉
\(J(2n) = 2J(n) - 1\)
\(J(2n + 1) = 2 J(n) + 1\)
对递归式打表+数学归纳
- \(J(2^m + l) = 2l + 1\),\(0 \le l < 2^m\)
用二进制形式表示?
- \(J(n)\)相当于把\(n\)在二进制下循环左移了一位。
一些性质
\(J(J(J(.....J(n))))\)最后会停在不动点——二进制下全是1的数
解\(J(n) = \frac{n}{2}\),得\(l = \frac{1}{3} (2^m - 2)\),m为奇数时一定有解。
拓展一下递归式?
\(f(1) = \alpha\); \(f(2n) = 2 f(n) + \beta\); \(f(2n + 1) = 2 f(n) + \gamma\).
显然\(f(n) = A(n) \alpha + B(n) \beta + C(n) \gamma\).
法一:打表、归纳
法二:带入\(f(n)=1\),\(f(n)=n\).解出对应的\(\alpha,\beta,\gamma\),从而解出\(A(n),B(n),C(n)\).
叕拓展一下递归式?
\(f(j) = \alpha_j\); \(f(dn + j) = c f(n) + \beta_j\).
\(f((b_m b_{m-1} .... b_1 b_0)_d) = (\alpha_{b_m} \beta_{b_{m-1}} .... \beta_{b_0})_c\).
和式
和式和递归式
将和式转化为递归式
可得$R_n = A(n) \alpha + B(n) \beta + C(n) \gamma $。
用上一节的成套方法,即用\(R_n\)为简单函数,解出 \(\alpha,\beta,\gamma\),从而解出\(A(n),B(n),C(n)\)
将递归式转为和式
\(a_n T_n = b_n T_{n-1} + c_n\); \(T_0\)是个常数。
令\(s_n = \frac{a_{n-1} a_{n-2} .... a_1}{b_n b_{n-1} b_2}\); 则有\(b_n s_n = a_{n-1} s_{n-1}\).
则有:\(T_n = \frac{1}{a_n s_n} (s_1 b_1 T_0 + \sum_{k=1}^{n} s_k c_k)\).
注意,要求所有\(a_n,b_n\)均不为0.
例题:计算快速排序复杂度
\(C_0 = C_1 = 0\); \(C_n = n + 1 + \frac{2}{n} \sum_{k=0}^{n-1} C_k\).
先转换为递归式
两边乘\(n\):$n C_n = n(n+1) + 2\sum_{k=0}^{n-1} C_k $.
对应到\(n-1\): $(n-1) C_{n-1} = n(n-1) + 2\sum_{k=0}^{n-2} C_k $.
相减:\(n C_n = (n + 1) C_{n-1} + 2n\); \(C_2 = 3\).
应用公式
\(a_n = n\); \(b_n = n+1\); \(c_n = 2n - 2[n=1]+2[n=2]\); \(s_n = \frac{2}{n(n+1)}\)
\(C_n = 2(n+1)\sum_{k=1}^{n} \frac{1}{k+1} - \frac{2}{3}(n+1)\).
封闭形式
调和数:\(H_n = \sum_{k=1}^{n} \frac{1}{k}\).
\(C_n = 2(n+1) H_n - \frac{8}{3}n - \frac{2}{3}\).
和式的处理
扰动法
\(S_n = \sum_{i=0}^{n} a_n\)
\(S_n + a_{n+1} = a_0 + \sum_{i=0}^{n} a_{i+1}\)
尝试用\(S_n\)来表示右边
例题:\(S_n = \sum_{k=0}^{n} k 2^k\)
- \(S_n + (n+1)2^{n+1} = \sum_{k=0}^{n} (k+1) 2^{k+1} = 2S_n + (2^{n+2} - 2)\);化简即可
拓展:\(S_n = \sum_{k=0}^{n} k x^k\).
\(\sum_{k=0}^{n} x^k = \frac{1-x^{n+1}}{1-x}\)
求导:\(\sum_{k=0}^{n} k x^{k-1} = \frac{1-(n+1)x^n + nx^{n+1}}{(1-x)^2}\).
看起来离散和连续之间,有一种不可告人的关系
多重和式
切比雪夫单调不等式
\(S = \sum_{1 \le j < k \le n} (a_k - a_j) (b_k - b_j)\)
$2S = \sum_{1 \le j,k \le n} (a_k - a_j) (b_k - b_j) = 2n \sum_{k=1}^{n} a_k b_k - 2 (\sum_{k=1}^{n} a_k) (\sum_{k=1}^{n} b_k) $
\((\sum_{k=1}^{n} a_k) (\sum_{k=1}^{n} b_k) = n \sum_{k=1}^{n} a_k b_k - \sum_{1 \le j < k \le n} (a_k - a_j) (b_k - b_j)\).
当\(a_i,b_i\)不减时,\(S \ge 0\),上式的等号变成\(\le\)
当\(a_i\)不减,\(b_i\)不增,\(S \le 0\),上式取\(\ge\)
连续情况下的切比雪夫不等式
- \((\int_a^b f(x) dx) (\int_a^b g(x) dx) \le (b-a) (\int_a^b f(x)g(x)dx)\); 若\(f(x),g(x)\)不减
例题:\(S_n = \sum_{1 \le j < k \le n} \frac{1}{k-j}\)
\(S_n = \sum_{0 \le k < n} H_k\)
\(S_n = \sum_{k=1}^{n} \frac{n-k}{k} = n H_n - n\)
从而\(\sum_{0 \le k < n} H_k = n H_n - n\). 真是神奇
一般性的方法
讨论\(S_n = \sum_{k=1}^{n} k^2\)的解法
打表+猜测答案+数学归纳
扰动法
- 需要用\(\sum_{k=1}^{n} k^3\)来扰动.
成套方法
\(R_n = R_{n-1} + \beta + \gamma n + \delta n^2\)
\(R_n = A(n) \alpha + B(n) \beta + C(n) \gamma + D(n) \delta\)
假定\(\delta = 0\),\(A(n),B(n),C(n)\)和之前一样;再令\(R_n = n^3\),解出\(D(n)\)
用积分估计,对误差递归
\(\int_0^n x^2 dx = \frac{n^3}{3}\)
令\(E_n = S_n - \frac{n^3}{3}\)
\(E_n = S_{n-1} + n^2 - \frac{n^3}{2} = E_{n-1} + \frac{(n-1)^3}{2} + n^2 - \frac{n^3}{2} = E_{n-1} + n - \frac{1}{3}\)
\(E_n\) 超级好算。
展开和放缩
\(S_n = \sum_{1 \le j \le k \le n} k = \sum_{1 \le j \le n} (j+n)(n-j+1)/2\)
拆开即可
有限微积分
下降幂
\(x^{\underline{m}} = x(x-1)(x-2)...(x-m+1)\),\(m > 0\)
\(x^{\underline{-m}} = \frac{1}{(x+1)(x+2)...(x+m)}\),\(m > 0\)
\(x^{\underline{m+n}} = x^{\underline{m}} (x - m)^{\underline{n}}\)
求解\(\sum_{a \le x < b} f(x)\)
若能找到\(f(x) = g(x+1) - g(x)\)
则答案为\(g(b) - g(a)\)
一些“原函数”
\(x^{\underline{m}} = \frac{1}{m+1}[(x+1)^{\underline{m+1}} - x^{\underline{m+1}}]\),\(m \ne -1\)
$x^{\underline{-1}} = \frac{1}{x+1} = H(x+1) - H(x) \(,\)H(x)$是调和数
\(x = \frac{1}{2}[(x+1)x - x(x-1)]\)
\(x^n\) 要先用斯特林数化成\(x^{\underline{m}},1 \le m \le n\)的形式,然后分别找原函数
\(2^x = 2^{x+1} - 2^x\),和连续时\(e^x\)类似
\(c^x = \frac{c^{x+1} - c^x}{c-1}\)
离散的“分部积分”
\(\sum_{a \le x < b} u(x) [v(x+1) - v(x)] = u(b) v(b) - u(a) v(a) - \sum_{a \le x < b} [u(x+1) - u(x)] v(x+1)\)
例题:\(\sum_{0 \le x < n} H_x x\)
\(x = \frac{1}{2}[(