算法学习笔记(40): 具体数学

具体数学

本文是阅读《具体数学》产生的理解性文本,并且涵盖了部分其他相关的内容。

不怎么重要或者太难的东西因为时间问题,我略过了。

本文来之不易,请勿机械搬运:原文地址 -https://www.cnblogs.com/jeefy/p/17848037.html

目录

第二章 - 和式

和式的处理

和式是一切的基础,其三个法则十分重要:

\\\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, mp 进制下做加法的**进位次数** 。

注意到 \(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 \\frac 1 {1 - x} 表示 \\langle 0, 1, \\frac 12, \\frac 13, \\cdots \\rangle 的证明:

考虑 \(\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)} \\


线性递推

斐波那契数列衍生而出的另一个知识叫做递推,而递推就可以讲到线性齐次递推和非齐次递推。

或许我们需要先学会生成函数?

对于形如:

\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} \\

在下述意义下是原递推关系的通解:
无论给定如何的初值 h_0, h_1, \\cdots h_{k - 1},都存在一组 c_1, c_2, \\cdots, c_k 使之满足递推关系和初始条件。

换句话来说,是通解意味着对于任意给定的初值,都可以解出如下方程组:

\\\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): \& \ \\\\ xF(x): \& \ \\\\ x\^2F(x): \& \ \\end{array} \\

于是 \(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!} \\

解递归式

我们在线性递推那里已经看到了生成函数的重要性,我们是否能够找到一个基本方法以求解出任何递推式?

答案是可以的,并且这个方法相当的机械:

  1. 将递归式写成关于 \(h_n\) 的单个方程,在假定 \(h_{-1} = h_{-2} = \cdots = 0\) 的情况下对于任何正整数成立!
  2. 将他改写为生成函数 \(F(x)\) 之间的关系。
  3. 解得到的生成函数 \(F(x)\),将之表示为封闭形式。
  4. 展开 \(x\^nF(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) \\


概率生成函数

感觉没啥用,咕。


作者有话说

本文共 \(\ge 10000\) 个词,\(\ge 25000\) 个字符(包括公式),花了 \(3\) 天时间,梳理了具体数学一书中目前对我有用的部分。

有很多的启示,补全了很多我所未知或者不熟练的东西。

限于时间原因,很多内容我无法细细谈论,如果有时间后面再补充(其实也没啥特别重要的东西了,边边角角的

完结撒花*★,°* :.☆( ̄▽ ̄)/$:.°★