具体数学
本文是阅读《具体数学》产生的理解性文本,并且涵盖了部分其他相关的内容。
不怎么重要或者太难的东西因为时间问题,我略过了。
本文来之不易,请勿机械搬运:原文地址 - https://www.cnblogs.com/jeefy/p/17848037.html
[TOC]
第二章 - 和式
和式的处理
和式是一切的基础,其三个法则十分重要:
$$\sum_{k \in K} c a_k = c \sum_{k \in K} a_k \tag{1.1} $$
$$\sum_{k \in K}(a_k + b_k) = \sum_{k \in K} a_k + \sum_{k \in K} b_k \tag{1.2} $$
$$\sum_{k \in K} a_k = \sum_{p(k) \in K} a_{p(k)} \tag{1.3} $$
其中 $(1.1)$ 代表着分配律,$(1.2)$ 代表的结合律,而 $(1.3)$ 代表的交换律。
我们可以通过这三种法则证明高斯给出的等差数列求和的公式:
$$\begin{aligned} \sum_{0 \le k \le n} (a + bk) &= \sum_{0 \le n - k \le n} (a + b(n - k)) \\ &= \sum_{0 \le k \le n} (a + bn - bk) \\ &= \frac 12 \left( \sum_{0 \le k \le n} (a + bn - bk) + \sum_{0 \le k \le n} (a + bk) \right) \\ &= \frac 12 \left( \sum_{0 \le k \le n} (2a + bn) \right) \\ &= \frac 12 (2a + bn) \sum_{0 \le k \le n} 1 \\ &= \frac 12 (2a + bn) (n + 1) \end{aligned} $$
其中 $0 \to 1 \to 2$ 我们用了两次交换律,在 $4$ 用了结合律,在 $5$ 用了分配律。
常常我们化简式子可能就是这些法则的排列组合。
对于多重和式,我们有着一个新的技巧:交换求和次序
$$\sum_j \sum_k a_{j, k} [P(j, k)] = \sum_{P(j, k)} a_{j, k} = \sum_k \sum_j a_{j, k} [P(j, k)] $$
其中 $[P(j, k)]$ 是用于验证 $j, k$ 的组合是否合法的符号,如果合法则为 $1$,反之为 $0$。
也就是说我们并不在意我们到底先枚举的是哪一个变量,但是有些时候枚举另一个变量确实可能简单很多。
我们可以通过这个法则阐释矩阵乘法的结合律:
$$M = (AB)C = A(BC) $$
$$\begin{aligned} M_{i, j} &= \sum_{k} (AB)_{i, k} \times C_{k, j} \\ &= \sum_k (\sum_z A_{i, z} \times B_{z, k}) \times C_{k, j} \\ &= \sum_k \sum_z A_{i, z} \times B_{z, k} \times C_{k, j} \\ &= \sum_z A_{i, z} (\sum_k B_{z, k} \times C_{k, j}) \\ &= \sum_z A_{i, z} \times (BC)_{z, j} \end{aligned} $$
于是我们可以从和式的角度了解到矩阵乘法确实满足结合律。
有限微积分
较好的参考文章:有限微积分与数列求和 - LUNATIC time!
在离散数学中,最小的单位就是 $1$,那么如果要把无限微积分那一套搞过来,那么 $Df(x)$ 中的 $D$ 的含义就必须发生变化。
定义差分算子 $\Delta f(x) = f(x + 1) - f(x)$,可以看到这与 $Df(x) = \lim_{h \to 0} \frac {f(x + h) - f(x)} h$ 十分的相似。
对于无限微积分来说,$D(x^n) = n x^{n - 1}$ 是个非常优美的性质。
然而 $\Delta (x^n)$ 却是十分的丑陋,于是需要找到新的代替品:
$$\Delta (x^{\underline{n}}) = n x^{\underline{n - 1}} $$
其中 $x^{\underline n} = x (x - 1) (x - 2) \cdots (x - n + 1)$。
有了类似的微分,我们需要考虑积分。在无限微积分中,我们有 $\int_a^b g(x) dx = f(x) \vert_a^b = f(b) - f(a)$,其中 $g(x) = Df(x)$。
而在有限微积分中,我们有另外一个东西:
$$\sum\nolimits_a^b g(x) \delta x = f(x) \vert_a^b = f(b) - f(a) \tag {2.1} $$
其中 $g(x) = \Delta f(x)$。
这是一个左闭右开区间,所以我们可以简单的合并几个和式:$\sum_a^b + \sum_b^c = \sum_a^c$。
我们可以通过这个法则简单的得到 $x^{\underline n}$ 的求和公式。
考虑 $\Delta (x^{\underline{n}}) = n x^{\underline{n - 1}}$ 的事实,我们可以推知 $\frac 1 {m + 1}((x + 1)^{\underline {n + 1}} - (x)^{\underline {n + 1}}) = x^{\underline n}$。
也就是若 $g(x) = x^{\underline n}$,那么存在 $f(x) = \frac 1 {n + 1} x^{\underline{n + 1}}$ 满足 $\Delta f(x) = g(x)$。
那么此时我们可以得到:
$$\sum_{0 \le k \lt n} k^{\underline m} = \sum\nolimits_0^n k^{\underline m} \delta x = \left. \frac {k^{\underline{m + 1}}}{m + 1} \right \vert_0^n = \frac {n^{\underline {m + 1}}} {m + 1} $$
在这个过程中,对于下标 $0 \le k \lt n$ 告诉我们,左闭右开区间一般比闭区间更好处理!
但是这个过程并不完美,因为我们没有考虑到 $m = -1$ 的情况。
考虑 $x^{\underline {-1}} = \frac 1 {x + 1}$,于是我们可以得知 $\sum_{0 \le k \lt n} k^{\underline {-1}} = H_k \vert_0^n = H_n$ !
其中 $H_n = \sum_{1 \le k \le n} \frac 1 k$,这是一个类似于 $\ln n$ 的东西,两者的差值并不会太大。
分部求和
无限微积分中,乘法求导有一个公式:$D(uv) = u Dv + v Du$,那么有限微积分中是否也有类似的产物?
将差分算子运用在两个函数上:
$$\begin{aligned} \Delta (f(x) g(x)) &= f(x + 1)g(x + 1) - f(x) g(x) \\ &= \left( f(x + 1) g(x + 1) - f(x) g(x + 1) \right) + \left (f(x) g(x + 1) - f(x) g(x) \right) \\ &= f(x) (g(x + 1) - g(x)) + (f(x + 1) - f(x)) g(x + 1) \\ &= f(x) \Delta g(x) + g(x + 1) \Delta f(x) \end{aligned} $$
如果我们定义位移算子 $E = \Delta^{-1}$,也就是 $E f(x) = f(x + 1)$,那么我们有:
$$\Delta (uv) = u \Delta v + Ev \Delta u = v \Delta u + Eu \Delta v $$
我们重新排布一下两边,并且对于各自求一个和,那么我们就可以得到部分求和法则:
$$\sum\nolimits_{a}^b u \Delta v = \left. u v \right|_a^b - \sum\nolimits_a^b Ev \Delta u \tag{2.2} $$
它的作用在于一个和式两部分不太好求,但是一部分是某一个简单式子的差分形式,另一部分有着一个简单的差分形式,那么我们可以通过这种方式进行尝试。
$$\sum_{k = 0}^{n - 1} k 2^k = \sum\nolimits_0^n x 2^x \delta x $$
我们可以知道,$f(x) = x$ 有着 $\Delta f(x) = 1$ 的优秀形式,而 $\Delta (2^k) = 2^k$,于是利用部分求和法则:
$$\sum\nolimits_0^n x 2^x \delta x = \left. x 2^x \right\vert_0^n - \sum\nolimits_{0}^n 2^{x + 1} \delta x $$
对于第二部分是一个简单的等比数列形式,那么我们可以得知:
$$\sum_{k = 0}^{n - 1} k 2^k = n 2^n - (2^{n + 1} - 2) = (n - 2) 2^n + 2 $$
现在我们尝试看另外一个例子:
$$\sum\nolimits_0^n x^{\underline k} a^x \delta x \quad (a \ne 1) \tag{2.3} $$
其中 $x^{\underline k}$ 有简单的差分形式,而 $a^x$ 是 $\frac {a^x}{a - 1}$ 的差分形式,那么我们可以化为:
$$\begin{aligned} &= \left. \frac {x^{\underline k} a^x} {a - 1} \right \vert_0^n - \sum\nolimits_0^n \frac {a^{x + 1}}{a - 1} k x^{\underline {k - 1}} \\ &= \frac {n^{\underline k} a^n} {a - 1} - \frac {ak} {a - 1} \sum\nolimits_0^n a^x x^{\underline {k - 1}} \delta x \end{aligned} $$
这个式子我们需要保证 $k \ne 0$ 才是正确的,否则,$n^{\underline k} a^n$ 应当写为 $n^{\underline k} a^n - 0^{\underline k} a^0$ 以避免分讨。
此时我们发现后半部分的式子是一摸一样的,所以考虑设 $S_k = \sum_0^n x^{\underline k} a^x \delta x$,那么根据上式,我们有:
$$S_k = \frac {n^{\underline k} a^n - 0^{\underline k} a^0} {a - 1} - \frac {ak}{a - 1} S_{k - 1} $$
其中,若 $k = 0$ 时,有 $S_0 = \sum_0^n a^x \delta x = \frac {a^n - 1}{a - 1}$,于是我们可以 $O(k)$ 的递推求出这个式子。
我们可以尝试进行展开:
$$\begin{aligned} S_k &= \prod_{j = 1}^k (- \frac {aj}{a - 1})S_0 + \sum_{i = 1}^k \frac {n^{\underline i} a^n - 0^{\underline i} a^0} {a - 1} \prod_{j = i + 1}^k (- \frac {aj}{a - 1}) \\ &= (- \frac {a}{a - 1})^k k^{\underline k} \frac {n^{\underline 0} a^n - 1}{a - 1} + \sum_{i = 1}^k \frac {n^{\underline i} a^n - 0^{\underline i} a^0} {a - 1} (- \frac {a}{a - 1})^{k - i} k^{\underline {k - i}} \\ &= \sum_{i = 0}^k \frac {n^{\underline i} a^n - 0^{\underline i} a^0} {a - 1} (\frac {-a}{a - 1})^{k - i} k^{\underline {k - i}} \\ &= \frac {1}{a - 1} \sum_{i = 0}^k (\frac {-a} {a - 1})^{k - i} k^{\underline {k - i}} (n^{\underline k} a^n - 0^{\underline k} a^0) \end{aligned} $$
得到了其较为简单的非递归式,然而其是否存在封闭形式?目前看来并没有。
小练习:
$$\sum x H_x \delta x $$
第四章 - 数论
阶乘的因子
常见的问题为 $n!$ 中有多少个因子 $p$。
我们常见的想法是考虑有 $k$ 个因子 $p$ 的数有多少个,但是这是不好算的,考虑至少有 $k$ 个因子的有多少个。
简单的,显然的,这就是 $\lfloor \frac n {p^k} \rfloor$,于是乎恰好有 $k$ 个因子的数有 $\lfloor \frac n {p^k} \rfloor - \lfloor \frac n {p^{k + 1}} \rfloor$,于是我们得到式子:
$$\sum_k k(\lfloor \frac n {p^k} \rfloor - \lfloor \frac n {p^{k + 1}} \rfloor) $$
这太丑陋了,小小展开,我们其是就发现更简单的形式:
$$\sum_{k \ge 1} \lfloor \frac n {p^k} \rfloor $$
有了这个,或许我们就可以证明 Kummer 定理了:
$\binom{n + m}{m}$ 中素因子 $p$ 的次数 $=$ $n, m$ 在 $p$ 进制下做加法的进位次数 。
注意到 $n!$ 中 $p$ 的次数为 $\sum_{i = 0} \lfloor \frac n {p^i} \rfloor$
于是对于 $\binom{n + m}{m} = \frac {(n + m)!}{n! m!}$
因子的个数为 $\sum_{i = 0} \lfloor \frac{n + m}{p^i} \rfloor - \lfloor \frac{n}{p^i} \rfloor - \lfloor \frac{m}{p^i} \rfloor$
也就是说只有 $n + m$ 在这里进位了才能逃离被删除的宿命……并且由此还可以证明其因数 $p$ 的个数不超过 $\log_p (n + m)$。
互素
在书上的典型结构是 Stern-Brocot 树。它大概长这样:

每次得到的新的分数是由左右两个祖先 $\frac m n, \frac {m'} {n'}$ 拼凑而来:$\frac {m + m'}{n + n'}$
如果继续观察,每一层相邻的两个数 $\frac m n, \frac {m'} {n'}$ 一定满足:
$$m' n - m n' = 1 $$
这意味着一定满足 $\frac m n < \frac {m'} {n'} \iff m' n - m n' > 0$(因为这里保证 $n > 0$)
这意味着如果我们有其相邻的分数的信息,我们就可以找到它。
我们可以通过矩阵的形式来表示:
$$\begin{pmatrix} n & n' \\ m & m' \end{pmatrix} \to \frac {n + n'}{m + m'} $$
我们考虑向左一步,那么左侧的不变,右侧的变成自己:
$$\begin{pmatrix} n & n' \\ m & m' \end{pmatrix} \begin{pmatrix} 1 & 1 \\ 0 & 1 \end{pmatrix} \to \begin{pmatrix} n & n + n' \\ m & m + m' \end{pmatrix} $$
向右一步则是左侧变成自己,右侧不变:
$$\begin{pmatrix} n & n' \\ m & m' \end{pmatrix} \begin{pmatrix} 1 & 0 \\ 1 & 1 \end{pmatrix} \to \begin{pmatrix} n + n' & n' \\ m + m' & m' \end{pmatrix} $$
于是我们可以简单的二叉搜索出某个分数在树上的位置。
第五章 - 二项式系数
二项式系数有很具体的用处,但是想要用好却不是那么容易。
比较细致的文章:# 二项式系数 - zhiyangfan 的小窝
主要是变化太多了,啥都能套一套。
我们对书中部分公式进行证明。
$$\sum_k \binom s k \binom t {m - k} = \binom {s + t} m \tag{5.1} $$
$(5.1)$ 是范德蒙德卷积,典。
$$\sum_k \binom s k \binom t {m + k} = \sum_k \binom s k \binom t {t - m - k} = \binom {s + t}{t - m} \tag{5.2} $$
$(5.2)$ 是利用了恒等变换的范德蒙德卷积,前提是 $t \ge 0$。
$$\sum_k (-1)^k \binom{s}{m + k} \binom{t + k} n = (-1)^{s + m} \binom {t - m}{n - s} , \quad s \ge 0\tag{5.3} $$
原文中 $(5.3)$ 的证明利用了对于 $s$ 的归纳法,这里尝试给出变换性的证明。
$$\begin{aligned} &= \sum_k (-1)^k \binom s {m + k} \binom {t + k}{t + k - n} \\ &= \sum_k (-1)^k \binom s {m + k} (-1)^{t + k - n} \binom {-n - 1}{t + k - n} \\ &= (-1)^{t - n} \sum_k \binom s {m + k} \binom {-n - 1}{t + k - n} \\ &= (-1)^{t - n} \binom {s - n - 1}{s - m + t - n} \\ &= (-1)^{t - n} (-1)^{s - m + t - n} \binom {t - m} {n - s} \\ &= (-1)^{s + m} \binom {t - m} {n - s} \end{aligned} $$
但是这个变化步骤中有很大的漏洞:
- 在第一步 $\binom {t + k}{n} \to \binom {t + k}{t + k - n}$ 的过程中,我们并没有关注 $t + k \ge 0$ 的条件,同样,在最后我们也没有关注 $t + m \ge 0$ 的条件。
但是我太菜了,只能想到如此推导了……
上文是我自己思考的结果……QwQ
感谢 @British_Union 的提示
并感谢 @myee 给出的另一种证明的方法:多项式推理法。
我们发现如果我们能够保证 $t > m$,那么上述的问题都将不复存在,我们可以合理的如此推导。
而多项式推理法指的是我们可以发现如果 $n, m, s$ 确定,那么这是一个关于 $t$ 的 $n - s$ 次多项式:
$$(-1)^{s + m} \frac {(t - m)^{\underline {n - s}}}{(n - s) !} $$
对于等式左侧, 我们可以确定是其也是关于 $t$ 的一个 $n$ 次多项式,两者在满足 $t > m$ 时相减存在无穷的零点,意味着相减后我们得出的多项式为常数多项式 $f(x) = 0$,意味着两边相等。
于是我们可以合理的推出这个式子在 $t$ 作为变量的情况下对于全体实数成立。
剩下的两个式子推导和这个是一样的套路,不再展开。
我们顺便多学习一下多项式推理法。
在正整数下,我们了解到帕斯卡恒等式的成立:
$$\binom rk = \binom {r - 1} k + \binom {r - 1}{k - 1} $$
我们可以知道两侧都是关于 $r$ 的 $k$ 次多项式,相减也一定是一个 $k$ 次多项式。
而一个 $d$ 次多项式至多有 $d$ 个零点,所以两个 $d$ 次多项式相减有两种情况:
- 至多 $d$ 个零点,这意味着两者不尽相等。
- 无穷多个零点,此时相减出来的多项式正是 $f(x) = 0$。
我们在此可以了解到在 $\Z_+$ 下等式成立,意味着减出来有无穷多个零点,也就意味着两者相等!
于是我们可以了解到这个恒等式在 $r \in \R$ 下成立!
来到新的挑战:
$$\sum_{k \ge 0} \binom {n + k} {2k} \binom {2k} k \frac {(-1)^k} {k + 1}, n \ge 0 $$
显然的我们利用三项式变化一下:
$$\sum_{k \ge 0} \binom {n + k}{k} \binom {n}{k} \frac {(-1)^k} {k + 1} $$
利用 $\binom nm = \frac nm \binom {n - 1}{m - 1}$ 我们可以干掉 $k + 1$:
$$\sum_{k \ge 0} \binom {n + k}{k} \binom {n + 1} {k + 1} \frac {(-1)^k}{n + 1} $$
对于内部来说,我们可以利用恒等变换,再利用 $(5.3)$ 的结果:
$$\frac 1 {n + 1} \sum_{k} \binom {n + k}{n} \binom {n + 1}{k + 1} (-1)^k = \frac 1 {n + 1} (-1)^n \binom{n - 1} {-1} = 0 $$
但是事实上这里也有同上的漏洞,$\binom {n + k} k$ 中 $n + k$ 可能 $< 0$ 使得恒等变化后原本没有值的地方有了值,但是我们需要保证 $k \ge 0$,所以上面的变换不尽正确!
所以换一个尝试:
$$\sum_{k \ge 0} (-1)^k \binom {-n - 1}{k} \binom {n + 1} {k + 1} \frac {(-1)^k}{n + 1} = \frac 1 {n + 1} \binom 0 n $$
也就是当 $n = 0$ 非 $0$,即原式等价于 $[n = 0]$。
通过如上两个例子,我们发现对称恒等式确实是一个陷阱……能别用就别用,除非能保证上指标 $\ge 0$。
我们进入作业题,对于整数 $n, m \ge 0$,求出:
$$\sum_{j = 1}^m (-1)^{j + 1} \binom r j \sum_{k = 1}^n \binom {-j + rk + s}{m - j} $$
看着好恐怖,$j$ 出现了 $4$ 次!还有两个和式!不过这都是小问题。
我们尝试一点一点消掉他们。
首先观察到 $\binom {-j + rk + s}{m - j}$ 上下都有 $-j$,尝试利用上指标反转干掉一个:
$$\begin{aligned} & \sum_{j = 1}^m \sum_{k = 1}^n (-1)^{j + 1} \binom rj (-1)^{m - j} \binom {m - rk - s - 1}{m - j}\\ =& (-1)^{m + 1} \sum_{j = 1}^m \sum_{k = 1}^n \binom rj\binom {m - rk - s - 1}{m - j} \end{aligned} $$
我们发现在 $k$ 已知的情况下,这就类似一个范德蒙德卷积!于是改变求和顺序:
$$\begin{aligned} &= (-1)^{m + 1} \sum_{k = 1}^n (- \binom r0 \binom {m - rk - s - 1} {m - j} + {}\sum_j \binom rj \binom {m - rk - s - 1}{m - j}) \\ &= (-1)^{m + 1} \sum_{k = 1}^n (\binom{m + r(1 - k) - s - 1}{m} - \binom {m - rk - s - 1}{m}) \end{aligned} $$
考虑外面有一个 $(-1)^m$,内部的下指标都是 $m$,那么都反转一下,顺便将剩下的 $-1$ 乘进去:
$$\begin{aligned} &= \sum_{k = 1}^n (\binom{kr + s}{m} - \binom{(k - 1)r + s}{m}) \\ &= \sum_{k = 1}^n \binom{kr + s}{m} - \sum_{k = 1}^n \binom {(k - 1)r + s}{m} \end{aligned} $$
稍微平移一下下标:
$$\begin{aligned} &= \sum_{k = 1}^n \binom{kr + s}{m} - \sum_{k = 0}^{n - 1} \binom {kr + s}{m} \\ &= \binom {kn + s}{m} - \binom {s}{m} \end{aligned} $$
于是我们就得到了这个简单的封闭形式。
高阶差分与牛顿级数
这在 math 1.4 中讲了,内容参见 share-math。
第六章 - 特殊的数
斯特林数
斯特林数分为第一类和第二类。比较常用的是第二类。
第二类斯特林数 $n \brace k$ 的组合意义为讲 $n$ 个物品的集合划分为 $k$ 个非空子集的方法数。
利用这个意义我们可以引出一个递推式:
$${n \brace k} = {n - 1 \brace k - 1} + k {n - 1 \brace k} $$
分别指的是新开一个子集,或者放入某一个子集的方案数。
对于第一类斯特林数,其还对于每一个子集排成了环,形成了 $k$ 个轮换(cycle)
对于每一个大小为 $m$ 的子集,存在 $(m - 1)!$ 种轮换,由此可以看出存在 ${n \brack k} \ge {n \brace k}$。
我们同样可以通过组合意义找到一个递推式:
$${n \brack k} = {n - 1 \brack k - 1} + (n - 1) {n - 1 \brack k} $$
分别指新开一个轮换,或者插入到某一个元素前面。
有了加法公式,那么很多时候我们就可以通过归纳法证明与之相关的内容了。
在这之前,我们可以讨论一下 ${n \brack k}$ 与排列的关系。
轮换加排列在组合数学中有另外一个体现:置换。
置换可以将一个排列划分为若干个有向圈,每一个有向圈对应着某一个轮换。
这意味着每一个排列都对应着一个子集轮换的方案,换言之:
$$\sum_k {n \brack k} = n! $$
我们回到加法公式和归纳法上,关于 $n \brace k$ 有一个非常经典的等式:
$$x^n = \sum_k {n \brace k} x^{\underline k} $$
我们一定可以通过归纳法证明它,考虑 $x \times x^n = x^{n + 1}$,或许我们能够对 $n$ 进行归纳证明之。
先考虑 $n = 0$ 的情况,$LHS = 1$,而 $RHS = {0 \brace 0} x^{\underline 0} = 1$,故 $n = 0$ 的时候成立。
对于 $x^{n + 1}$,我们如此考虑归纳:
$$x^n = x \times x^{n - 1} = x \sum_k {n - 1 \brace k} x^{\underline k} $$
我们考虑 $x \times x^{\underline k}$ 是否有很好的表达方式,发现可以通过 $x^{\underline {k + 1}} = x^{\underline k} (x - k)$ 得出:
$$x \times x^{\underline k} = x^{\underline {k + 1}} + k x^{\underline k} $$
于是我们可以简单的将上式拆开:
$$\begin{aligned} & \sum_k {n - 1 \brace k} x^{\underline {k + 1}} + \sum_k {n - 1 \brace k} k x^{\underline k} \\ = & \sum_k {n - 1 \brace k - 1} x^{\underline k} + \sum_k {n - 1 \brace k} k x^{\underline k} \\ = & \sum_k \left( {n - 1 \brace k - 1} + k{n - 1 \brace k} \right) x^{\underline k} \\ = & \sum_k {n \brace k} x^{\underline k} \end{aligned} $$
于是归纳得证。
斯特林数有许许多多不那么常用的恒等式,所以并不太需要注意。
不过我们回到加法公式:
$$\begin{aligned} {n \brace k} &= {n - 1 \brace k - 1} + k {n - 1 \brace k} \\ {n \brack k} &= {n - 1 \brack k - 1} + (n - 1) {n - 1 \brack k} \end{aligned} $$
我们是否能够像:
$$\binom nk = \binom {n - 1}k + \binom {n - 1}{k - 1} $$
一样将他们推广到更多的地方?
事实上,如果我们先约定 ${0 \brace k} = {0 \brack k} = [k = 0]$ 以及 ${k \brace 0} = {k \brack 0} = [k = 0]$,那么我们就可以利用加法公式求出负数下 ${n \brace k}$ 的值!
如果将整个表画出来,那么我们将得到一个惊人整齐的等式:
$${n \brack k} = {-n \brace -k} $$
这容易利用加法公式验证。
第一类斯特林数并没有通项公式,但是第二类斯特林数却存在。
可以通过二项式反演简单的证明:
$${n \brace k} = \frac 1 {k!} \sum_{i = 0}^k \binom ki (-1)^{k - i} i^n $$
或者写成稍微好看的一个形式:
$${n \brace k} = \sum_{i = 0}^k \frac {i^n (-1)^{k - i}}{i! (k - i)!} $$
当这个形式一出来,那么我们就可以知道如何快速的求一行斯特林数了。
设 $F(x) = \frac {x^n}{i!}$,$G(x) = \frac {(-1)^x} {x!}$,那么知道:
$${n \brace k} = \sum_{i = 0}^k F(i) * G(k - i) $$
于是我们可以通过 NTT $O(n \log n)$ 的求出整行的第二类斯特林数。
我们现在考虑是否能够快速的求出整列的斯特林数?
我们考虑一列斯特林数的生成函数:
$$F_k(x) = \sum_i {i \brace k} x^k $$
根据加法公式,我们有:
$$F_k(x) = xF_{k - 1}(x) + k x F_k (x) $$
于是存在:
$$F_k(x) = \frac {x}{1 - kx} F_{k - 1}(x) $$
于是我们得到:
$$F_k(x) = \frac {x^k}{\prod_{i = 1}^k (1 - kx)} $$
于是可以分治 NTT 和多项式取逆做即可。
然而实际上有办法避免多项式求逆的,但是有点复杂。
但是不合理,代码太抽象了,我们换一个方法,考虑 EGF。
$$F_k^{(e)}(x) = \sum_i {i \brace k} \frac {x^i}{i!} $$
将斯特林数拆开:
$$\begin{aligned} F(x) &= \sum_i \frac {x^i}{i!} \sum_{j = 0}^k \frac {j^i}{j!} \frac {(-1)^{k - j}}{(k - j)!} \\ &= \sum_{j = 0}^k \frac {(-1)^{k - j}}{(k - j)! j!} \sum_i \frac {(jx)^i}{i!} \\ &= \sum_{j = 0}^k \frac {(-1)^{k - j}}{(k - j)! j!} e^{jx} \\ &= \frac 1 {k!} \sum_{j = 0}^k \binom ki {(-1)^{k - j}} e^{jx} \\ &= \frac { (e^x - 1)^{k}} {k!} \end{aligned} $$
于是多项式快速幂即可。这只需要写一个 NTT 即可做到 $O(n \log n \log k)$。
其实通过类似的方式,我们可以推导出第一类斯特林数行列的求法。
这里不做过多展开。
调和数
调和数 $H_n = \sum_{i = 1}^n \frac 1i$,认为是离散下对于 $\ln n$ 的模拟,其误差 $\gamma \approx 0.577215$。
这是欧拉所证明的:$\lim\limits_{n \to \infty} (H_n - \ln n) = \gamma$。
对于调和数我们还有一个与斯特林数挂钩的等式:
$${n + 1 \brack 2} = n! H_n \tag{6.1} $$
考虑通过:
$${n + 1 \brack 2} = n {n \brack 2} + {n \brack 1} = n {n \brack 2} + (n - 1)! $$
可以知道:
$$\frac 1 {n!} {n + 1 \brack 2} = \frac 1 {(n - 1)!} {n \brack 2} + \frac 1 n $$
于是只需要展开这个递归式即可得到 $(6.1)$。
第一个例题较好,复习了分部求和法则:
$$\sum_{0 \le k \lt n} \binom km H_k $$
如果掌握的分部求和法则,那么这就比较简单,这里不再展开。
我们总是会遇到它的生成函数的,虽然这是之后的内容(也是后面回来写的)
学完生成函数和卷积以后,我们会了解到一个小技巧:生成函数前缀和。
具体来说,对于 $\langle f_n \rangle$ 与 $\langle 1, 1, \cdots \rangle$ 的卷积会得到 $\langle \sum_{i = 0}^n f_i \rangle$。
在生成函数上的体现便是 $F(x) \to \frac 1 {1 - x} F(x)$。
我们可以利用这个技巧快速的算出 $H_k$ 的生成函数。
考虑 $H_n = \sum_{i = 1}^n \frac 1 i$,那么实际上它就是 $\langle 0, 1, \frac 12, \frac 13, \cdots \rangle$ 的前缀和。
后者实际上为 $\ln \frac {1}{1 - x}$,于是我们可以知道 $H_n$ 的生成函数为:
$$\frac 1 {1 - x} \ln \frac 1 {1 - x} $$
考虑 $\ln (1 + x)$ 利用泰勒展开:
$$\ln (1 + x) = \sum_{n \ge 0} \frac {(-1)^n}{n + 1}x^{n + 1} $$
利用 $-x$ 代替 $x$ 得到:
$$\ln (1 - x) = \sum_{n \ge 0} - \frac {x^n}{n} $$
于是我们只需要:
$$-\ln(1 - x) = \ln (\frac 1 {1 - x}) = \sum_{n \ge 0} \frac {x^n}n $$
斐波那契数
斐波那契数由如下递归式定义:
$$\begin{aligned} F_0 &= 0 \\ F_1 &= 1 \\ F_n &= F_{n - 1} + F_{n - 2} ,& n > 1 \end{aligned} $$
我们容易通过归纳法证明:
$$F_n = F_k F_{n - k} + F_{k - 1} F_{n - k - 1} \tag{6.2} $$
同样,也可以通过矩阵乘法证明,参见 # 算法学习笔记(37): 矩阵
由此我们可以推出:
$$F_n | F_{kn} $$
可以通过 $(6.2)$ 和归纳法简单的证明。
于是我们可以知道:
$$\gcd(F_n, F_m) = F_{\gcd(n, m)} $$
我曾经推了几个简单的式子:
- $\sum F_{2i}$
- $\sum F_{2i + 1}$
- $\sum F_i$
- $\sum (-1)^i F_i$
- $\sum F_i^2$
推导和证明都很简单,但是可能可以将 $\sum F_i^2$ 多提几句。
一般的代数推导就是~~打表+~~归纳就完事,高级一点展开 $F_i = F_{i - 1} + F_{i - 2}$ 慢慢化简证明。
但是这里是有几何推导的:

这东西可以看作二维平面的矩形,那么对此就可以直接化简了!
$$\sum_{i = 1}^n F_{i}^2 = F_{n} F_{n + 1} $$
然而考虑是否可以继续推广?例如立方体。

如果单纯的相加,我们总是会发现缺了一块,但是该如何补齐这缺失的部分?
考虑将红色的这一块 $F_n F_{n - 1} F_{n - 2}$ 补齐,那么就变成了一子问题,递归下去。

于是得到:$\sum (F_i^3 + F_i F_{i - 1} F_{i - 2}) = F_n^2 F_{n + 1}$。
但是好像仍然不是我们想要的……恕我太菜也想不出来了。
线性递推
斐波那契数列衍生而出的另一个知识叫做递推,而递推就可以讲到线性齐次递推和非齐次递推。
或许我们需要先学会生成函数?
对于形如:
$$h_n = \sum_{i = 1}^k a_i h_{n - i} \quad , n \ge k $$
定义其特征方程为:
$$x^k - \sum_{i = 1}^k a_i x^{k - i} = 0 $$
根据代数基本定理,上式有 $k$ 个根 $q_1, q_2, \cdots, q_k$,我们称之为特征根,那么:
$$h_n = \sum_{i = 1}^n c_i q_i^n \tag {6.3} $$
在下述意义下是原递推关系的通解:
换句话来说,是通解意味着对于任意给定的初值,都可以解出如下方程组:
$$\left\{ \begin{array}{rrl} (n = 0) & c_1 q_1^0 + c_2 q_2^0 + \cdots + c_k q_k^0 & = h_0 \\ (n = 1) & c_1 q_1^1 + c_2 q_2^1 + \cdots + c_k q_k^1 & = h_1 \\ \vdots & \vdots \\ (n = k - 1) & c_1 q_1^{k - 1} + c_2 q_2^{k - 1} + \cdots + c_k q_k^{k - 1} & = h_0 \end{array} \right. $$
而此方程组的系数矩阵为:
$$\begin{bmatrix} 1 & 1 & \cdots & 1 \\ q_1 & q_2 & \cdots & q_k \\ \vdots & \vdots & \ddots & \vdots \\ q_1^{k - 1} & q_2^{k - 1} & \cdots & q_k^{k - 1} \end{bmatrix} $$
这显然是一个范德蒙德矩阵,其行列式为:
$$\prod_{i < j} q_j - q_i $$
也就是说,我们需要保证根互不相同,使得矩阵满秩(行列式不为 $0$)才可以求出唯一解。
然而实际上有另外一种利用生成函数的方法,更加简明。
继续沿用斐波那契数列的例子 $f_n = f_{n - 1} + f_{n - 2}$。
设 $F(x) = \sum_{i \ge 0} f_i x^i$ 是其生成函数。
根据递推关系,我们可以得出 $F(x) = xF(x) + x^2F(x)$。
具体来说,三个生成函数对应的序列如下:
$$\begin{array} {rc}
F(x): &
于是 $F(x) = \frac 1 {1 - x - x^2}$ 得出也就很自然了(当然这是错误的。
真的自然吗?我们是不是忘了什么东西?
确实,我们忘了一些东西,我们重新将三者写下来:
$$\begin{array}{rc} F(x): & f_0 & +f_1 x & + f_2 x \\ xF(x): & & f_0 x & + f_1 x \\ x^2F(x): & & & f_0 x^2 \\ \end{array} $$
也就是说 $F(x) - xF(x) - x^2F(x)$ 实际上 $= f_0 + (f_1 - f0)x$!
将初始值 $f_0 = 0, f_1 = 1$ 带入,我们才真正地正确地得到其生成函数:
$$F(x) - xF(x) - x^2 F(x) = x \to F(x) = \frac x {1 - x - x^2} $$
如果我们得到了生成函数,我们是否能够确定其通项公式?答案是可以的。
我们将 $\frac x {1 - x - x^2}$ 稍微分解 $= \frac {c_1}{x - \frac {-1 + \sqrt 5}{2}} + \frac {c_2}{x - \frac {-1 - \sqrt 5}{2}}$。
可以列出方程简单的求解出 $c_1, c_2$ 是什么。
我们通过 $\frac 1 {1 - x} = \sum_{i \ge 0} x^i$ 各项展开,于是就可以得到其通项公式!
我们现在看看 $\frac {1 + \sqrt 5}{2}$ 以及 $\frac {1 - \sqrt 5}{2}$ 这两个数。
我们赋予了其一个符号,足以可见其重要程度:$\phi = \frac {1 + \sqrt 5}2, \hat \phi = \frac {-1} \phi = \frac {1 - \sqrt 5} 2$。
这两个数是 $1 - x - x^2 = 0$ 的根,故我们有:
$$\phi^2 = \phi + 1, \hat \phi^2 = \hat \phi + 1 $$
我们通过这两个符号将 $F(x)$ 写出来:
$$F(x) = \frac {x}{(x + \phi)(x + \hat \phi)} = \frac 1 {\sqrt 5} \left( \frac 1 {1 - \phi x} - \frac 1 {1 - \hat \phi x} \right) $$
这形式很优美,我们之后将会用到。
通过幂级数展开,我们就得到了 $f_n$ 的通项公式:
$$f_n = \frac 1 {\sqrt 5} (\phi^n - \hat \phi^n) $$
奇妙的是一堆 $\sqrt 5$ 乘起来就变成了一个整数!
来到更大的挑战:
$$h_n = 4 h_{n - 1} - 4 h_{n - 2} , \quad n \ge 2 $$
我们是否能够找到其通项公式?
从特征根考虑:$x^2 - 4x + 4 = 0 \to (x - 2)^2 = 0$。
此时 $2$ 作为根出现了两次,我们称之为二重特征根,在此情况下 $(6.3)$ 退化成了:
$$h_n = (c_1 + c_2) 2^n = c 2^n $$
然而这并不是我们想要的,因为对于给定的 $h_0 = a, h_1 = b$,我们不一定能够满足:
$$\begin{cases} n = 0, & c = a \\ n = 1, & 2c = b \end{cases} $$
所以我们需要另辟蹊径。
我们很容易知道 $h_n = 2^n$ 是其一个解,我们也可以证明 $h_n = n 2^n$ 是一个解。
为了寻找通解,我们可以断言:
$$h_n = c_1 2^n + c_2 n2^n $$
是这个递推式的通解!
我们进行验证,对其施加 $h_0 = a, h_1 = b$ 的初始条件,那么:
$$\begin{cases} n = 0, & c_1 = a \\ n = 1, & 2c_1 + 2c_2 = b \end{cases} \implies \begin{cases} c_1 = a \\ c_2 = \frac {b - 2a} 2 \end{cases} $$
我们总是有解!于是这可以作为其通解。
我们可以合理外推,从而找到一个更一般的结论。
对于特征方程的 $k$ 个根,一共有 $t$ 种不同的根。若 $q_i$ 是此方程的 $k_i$ 重根,那么此递推关系中 $q_i$ 对应的部分为:
$$H_n^{(i)} = \sum_{j = 1}^{k_i} c_{i, j} \ n^{k_i - j} \ q_i^n $$
而此递推关系的通解为:
$$h_n = \sum_{i = 1}^t H_n^{(i)} $$
对于非齐次线性递推,一般来说,利用生成函数会更为方便。这里举例说明。
$$\begin{cases} h_0 = 2 \\ h_n = 3 h_{n - 1} - 4n, & n \ge 1 \end{cases} $$
设其生成函数 $F(x)$,根据递推关系,我们有:
$$\begin{array}{rl} F(x) = & h_0 & + h_1 x & + h_2 x & + \cdots \\ 3xF(x) = & & + 3 h_0 x & + 3 h_1 x & + \cdots \end{array} $$
于是
$$F(x) - 3xF(x) = h_0 + (h_1 - 3h_0) + (h_2 - 3h_1) + \cdots = 2 - 4 \times 1 x - 4 \times 2 x^2 - \cdots $$
我们知道:
$$\sum_{n \ge 0} n x^n = \frac x {(1 - x)^2} $$
于是我们知道:
$$(1 - 3x)F(x) = 2 - 4 \frac {x}{(1 - x^2)} \iff F(x) = \frac {2}{1 - 3x} - \frac {4x}{(1 - x^2)(1 - 3x)} $$
于是,我们便可以通过拆分这一个函数求解出其通项:
$$h_n = -3^n + 2n + 3 $$
生成函数立大功!
第七章 - 生成函数
无限微积分
生成函数与高等数学强相关,确实需要部分知识,这里写下以便参考。
关于求导:
$$\begin{aligned} a^x &\to a^x \ln a \\ x^a &\to a x^{a - 1} \\ \log_ax &\to \frac 1 {x \ln a} \\ \ln x &\to \frac 1 x \end{aligned} $$
关于泰勒展开(这是在 $0$ 处的展开,我们用的最多):
$$f(x) = \sum_{i \ge 0} f^{(i)}(0) \frac {x^i}{x!} $$
解递归式
我们在线性递推那里已经看到了生成函数的重要性,我们是否能够找到一个基本方法以求解出任何递推式?
答案是可以的,并且这个方法相当的机械:
- 将递归式写成关于 $h_n$ 的单个方程,在假定 $h_{-1} = h_{-2} = \cdots = 0$ 的情况下对于任何正整数成立!
- 将他改写为生成函数 $F(x)$ 之间的关系。
- 解得到的生成函数 $F(x)$,将之表示为封闭形式。
- 展开 $[x^n]F(x)$,得到 $g_n$ 的封闭形式。
前面的步骤在上文的铺垫中应该十分清晰了,然而对于第四步,我们可能还有技巧上的困难。
一般来说,我们需要通过强硬的分解,将生成函数表示为:
$$F(x) = \sum \frac {c_i}{(1 - \alpha_i x)^{b_i + 1}} $$
从而得出很好的系数:
$$[x^n] F(x) = \sum c_i \binom {b_i + n}{b_i} \alpha_i^n $$
然而难点并不是在这一步,而是强硬分解出 $c_i$ 的那一步 QwQ
我们可能更多的只能依靠人类智慧完成。
我们来一个很好的例子:
$$\begin{cases} h_0 = h_1 = 1 \\ h_n = h_{n - 1} + 2 h_{n - 2} + (-1)^n, & n \ge 2 \end{cases} $$
我们将之写成一个式子:
$$h_n = h_{n - 1} + 2h_{n - 2} + (-1)^n[n \ge 0] + [n = 1] $$
于是可以将之改写为生成函数之间的关系:
$$F(x) = \sum_n h_n x^n = \sum_n h_{n - 1} x^n + 2 \sum_n h_{n - 2} x^n + \sum_{n \ge 0} (-1)^n x^n + x $$
我们可以稍微变化一下这个式子:
$$\begin{aligned} &= x F(x) + 2x^2 F(x) + \sum_{n \ge 0} \binom {-1} n z^n + x \\ &= x F(x) + 2x^2 F(x) + (1 + x)^{-1} + x \end{aligned} $$
于是得到:
$$F(x) = \frac {1 + x + x^2}{(1 - 2x)(1 + x)^2} $$
于是暴力展开即可得到通项:
$$h_n = \frac 79 2^n + (\frac 13 n + \frac 29)(-1)^n $$
卷积
对于给定的两个数列 $\langle f_n \rangle$ 以及 $\langle g_n \rangle$ 的卷积 $\langle h_n \rangle$,我们有:
$$\langle f_n \rangle * \langle g_n \rangle = \langle \sum_k f_k g_{n - k} \rangle = \langle h_n \rangle $$
注意到数列的卷积和生成函数的乘积对应,那么对于许多式子,我们就有很好的方法利用卷积处理了。
斐波那契数列卷积
是的,还是斐波那契数列,它具有十分重要的地位,它足够简单,也足够复杂。
我们尝试计算 $\sum_{k = 0}^n f_k f_{n - k}$ 的封闭形式,这是 $\langle f_n \rangle$ 与自身的卷积。
正常来说,我们直接可以利用 $F(x) = \frac x {1 - x - x^2}$ 的平方 $F(x)^2 = \frac {x^2}{(1 - x - x^2)^2}$ 然后展开求解其通项,但是这比较复杂,并没有更好的用到斐波那契和卷积。
我们尝试利用另一个生成函数:
$$\begin{aligned} F(x)^2 &= \left( \frac 1{\sqrt 5} \left( \frac 1 {1 - \phi x} - \frac 1 {1 - \hat \phi x} \right) \right)^2 \\ &= \frac 1 5 \left( \frac {1}{(1 - \phi x)^2} - \frac {2}{(1 - \phi x)(1 - \hat \phi x)} + \frac {1}{(1 - \hat \phi x)^2} \right) \\ &= \frac 1 5 \sum_{n \ge 0} (n + 1) (\phi x)^n - \frac 25 \sum_{n \ge 0} f_{n + 1} x^n + \frac 15 \sum_{n \ge 0} (n + 1) (\hat \phi x)^n \end{aligned} $$
中间关于 $\frac {1}{(1 - \phi x)(1 - \hat \phi x)}$ 的化简我们再从一个生成函数入手:
考虑 $\phi \hat \phi = -1$,我们有:
$$F(x) = \frac {-x} {(x +\phi) (x + \hat \phi)} = \frac {-x}{(x + \frac {-1}{\hat \phi})(x + \frac {-1}{\phi})} = \frac {-x}{\phi \hat \phi (\hat \phi x - 1)(\phi x - 1)} = \frac {x}{(1 - \hat \phi x)(1 - \phi x)} $$
于是 $\frac {1}{(1 - \phi x)(1 - \hat \phi x)} = \frac {F(x)} x - \sum_{n \ge 0} f_{n + 1} x^n$。
接下来我们继续化简上述式子,现在难点就在于 $\sum_{n \ge 0} (\phi^n + \hat \phi^n) x^n$ 怎么求。
考虑两者的生成函数:
$$\frac {1}{1 - \phi x} + \frac {1}{1 - \hat \phi x} = \sum_{n \ge 0} (\phi^n + \hat \phi^n) x^n $$
于是我们尝试对左式化简:
$$\begin{aligned} &= \frac {2 - \hat \phi x - \phi x}{(1 - \phi x) (1 - \hat \phi x)} \\ &= \frac {2 - x}{1 - x - x^2} = \frac {x} {2 - x} F(x) \end{aligned} $$
于是:
$$\phi^n + \hat \phi^n = [x^n] \frac x {2 - x} F(x) = 2f_{n + 1} - f_n $$
于是我们得到:
$$F(x)^2 = \frac 1 5 \sum_{n \ge 0} (n + 1) (2f_{n + 1} - f_n) x^n - \frac 25 \sum_{n \ge 0} f_{n + 1} x^n $$
于是得到通项公式:
$$\sum_{k = 0}^n f_k f_{n - k} = \frac {2n f_{n + 1} - (n + 1)f_n}{5} $$
生成函数的胜利!
指数生成函数
我们看看一个好好的例子:
$$\left( \ln \frac {1}{1 - z} \right)^m = m! \sum_{n \ge 0} {n \brack m} \frac {z^n}{n!} $$
好好好,这么玩是吧,但是为什么不用 $z^{\bar{m}} = \sum_{n \ge 0} {m \brack n} z^n$?
我们回到正常的 EGF,考虑对于 $\langle h_n \rangle$ EGF 的操作有哪些影响。
$$F(x) = \sum_{n \ge 0} h_n \frac {x^n}{n!} $$
考虑 $xF(x)$:
$$xF(x) = \sum_{n \ge 0} h_n \frac {x^{n + 1}}{n!} = \sum_{n \ge 1} h_{n - 1} \frac {x^n}{(n - 1)!} = \sum_{n \ge 0} n h_{n - 1} \frac {x^n}{n!} $$
这就是 $\langle n g_{n - 1} \rangle$ 的 EGF,相当于在 OGF 上求了一次导。
如果需要平移,那么我们只需要 $F'(x)$ 或者 $\int_0^z F(x)$ 即可。
对于指数生成函数的卷积来说,生成的数列是 $\langle f_n \rangle$ 和 $\langle g_n \rangle$ 的二项卷积:
$$h_n = \sum_k \binom n k f_{k} g_{n - k} $$
也就是考虑到 $\binom nk = \frac {n!}{k! (n - k)!}$:
$$\frac {h_n} {n!} = \sum_{k = 0}^n \frac {f_k}{k!} \frac {g_{n - k}}{(n - k)!} $$
这可以和伯努利数牵扯起来。
考虑伯努利数的递归式:
$$B_n = \sum_k \binom nk B_k $$
发现这就是 $\langle B_n \rangle$ 和 $\langle 1, 1, \cdots \rangle$ 的二项卷积。
所以我们得到其指数生成函数为 $\frac z {e^z - 1}$。
指数生成函数在组合意义上十分有用,其一个重要的应用于 $\exp$ 相关。
可以参考:# 浅谈 Exp 的组合意义 - 飞雨烟雁 的博客
更多 $O(n^2)$ 对于多项式的操作见:# 各种多项式操作的 n^2 递推
第八章 - 离散概率
期望与方差
期望的线性性以及耳熟能详了:
$$E(XY) = E(X)E(Y) $$
值得一提的是这并不要求两个随机变量独立!
对于方差,其基本的定义为:
$$V(X) = E \left( (X - E(X)^2 \right) $$
但是我们可以将之展开:
$$\begin{array}{ll} = E \left( (X - E(X)^2 \right) &= E \left(X^2 - 2X E(X) + E(X)^2 \right)\\ = E(X^2) - 2E(X)^2 + E(X)^2 &= E(X^2) - E(X)^2 \end{array} $$
也就是说:
我们也可以证明:
$$V(X + Y) = V(X) + V(Y) $$
概率生成函数
可见 math 1.5
作者有话说
本文共 $\ge 10000$ 个词,$\ge 25000$ 个字符(包括公式),花了 $3$ 天时间,梳理了具体数学一书中目前对我有用的部分。
有很多的启示,补全了很多我所未知或者不熟练的东西。
限于时间原因,很多内容我无法细细谈论,如果有时间后面再补充(其实也没啥特别重要的东西了,边边角角的
完结撒花*★,°:.☆( ̄▽ ̄)/$:.°★* 。