zoukankan      html  css  js  c++  java
  • 具体数学(Concrete Math) 读书笔记

    《具体数学》果真十分“具体”,远没有数学分析、高等代数那么“抽象”。这里记录了我在阅读这本书时所采撷的“心动瞬间”——这些数学公式真是令人心动——可以把这篇文章当做检索目录,遇到问题时: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) + eta); (f(2n + 1) = 2 f(n) + gamma).

      • 显然(f(n) = A(n) alpha + B(n) eta + C(n) gamma).

        • 法一:打表、归纳

        • 法二:带入(f(n)=1),(f(n)=n).解出对应的(alpha,eta,gamma),从而解出(A(n),B(n),C(n)).

    • 叕拓展一下递归式?

      • (f(j) = alpha_j); (f(dn + j) = c f(n) + eta_j).

      • (f((b_m b_{m-1} .... b_1 b_0)_d) = (alpha_{b_m} eta_{b_{m-1}} .... eta_{b_0})_c).

    和式

    和式和递归式

    • 将和式转化为递归式

      • 可得$R_n = A(n) alpha + B(n) eta + C(n) gamma $。

      • 用上一节的成套方法,即用(R_n)为简单函数,解出 (alpha,eta,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) + 2sum_{k=0}^{n-1} C_k $.

        • 对应到(n-1): $(n-1) C_{n-1} = n(n-1) + 2sum_{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} + eta + gamma n + delta n^2)

      • (R_n = A(n) alpha + B(n) eta + 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 e -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}[(x+1)^{underline{2}} - x^{underline{2}}])(v(x) = frac{1}{2} x^{underline{2}})

        • (H_{x+1} - H_x = x^{underline{-1}})

        • 答案为(frac{n^2}{2}(H_n - frac{1}{2})).

    无限和式

    • 无限个非负数的和?

      • 对于(sum_{k in K} a_k),如果存在常数(A),使得(K)的任意有限子集(F)都满足(sum_{k in F} a_k le A),则称(A)为一个上界;最小的(A)(即下确界)称为(sum_{k in K} a_k)的和。

      • 如果不在常数(A),则和为无限;可以用数分中的(epsilon - delta)语言写清楚。

      • 如果和有限且(K)为自然数集,则(sum_{k in K} a_k = lim_{n->infty} sum_{0 le k le n} a_k)

    • 无限和式的定义

      • 定义(x = x^+ - x^-)(x^+ = x [x > 0])(x^- = -x[x<0])

      • (sum_{k in K} a_k = sum_{k in K} a_k^+ - sum_{k in K} a_k^-)

      • 如果(sum_{k in K} a_k^+)(sum_{k in K} a_k^-)都有限,则无限和式存在;如果(sum_{k in K} a_k^+)无限,另一个有限,则无限和式为(+ inf). 反之亦然。如果都无限,则不予定义。

      • 和有限的无限和式之间,满足分配率、结合律、交换律

    • 一些反例

      • (T = 1 + 2 + 4 + 8 + .....)

        • (2T = 2 + 4 + 8 + .... = T - 1). (T = -1).

        • 事实上(T=+infty)

      • (T = 1 - 1 + 1 - 1 + 1 .....)

        • ((1 - 1) + (1 - 1) + .... = 0)

        • (1 + (-1 + 1) + (-1 +1)+.... = 1)

        • 事实上由等比数列可得,和为(frac{1}{2})。一群整数的和竟然是分数.....

      • (...+(- frac{1}{4}) + (- frac{1}{3}) + (- frac{1}{2}) + 1 + frac{1}{2} + frac{1}{3} + ......)

        • 可以等于0

        • 可以等于(1 + H_{2n} - H_{n+1}),每次右边选两个数,左边选一个数,求极限。和为(1 + ln(2))

    整值函数

    底和顶

    • (lceil x ceil - lfloor x floor = [x ext{不是整数}])

    • (lfloor frac{n}{m} floor = lfloor frac{cn}{cm} floor)

    底和顶的应用

    • (lfloor sqrt{lfloor x floor} floor = lfloor sqrt{x} floor)

      • 证明:设(m = lfloor sqrt{lfloor x floor} floor),展开得到(x)的范围

      • 拓展:若(f(x))是个单调递增的函数,且若(f(x))是整数能推导出(x)是整数,则(lfloor f(lfloor x floor) floor = lfloor f(x) floor)

    • (lceil sqrt{lfloor x floor} ceil = lceil sqrt{x} ceil)???

      • 否;当(m^2 < x < m^2 + 1)时,即(x)不是整数,且(sqrt{lfloor x floor})是整数时,为反例
    • (1 le n le 1000)中,有多少整数(n)满足(lfloor n^{frac{1}{3}} floor | n)?

      • (m = lfloor n^{frac{1}{3}} floor)

      • (1 + sum_{m=1}^{9} lfloor frac{(m+1)^3 - m^3}{m} floor = 172)

      • 用多项式近似,可得 (W = frac{3}{2} N^{frac{2}{3}} + O(N^{frac{1}{3}}))

      • (Spec(alpha) = { lfloor alpha floor , lfloor 2 alpha floor, lfloor 3 alpha floor, ........ })

      • (sqrt{2})(2+sqrt{2})的谱,构成所有正整数的划分。

    底和顶的递归式

    • (K_0 = 1);(K_{n+1} = 1 + min(2 K_{lfloor frac{n}{2} floor}, 3 K_{lfloor frac{n}{3} floor}));证明(K_n ge n)

      • 归纳法,需要证明(K_n ge n + 1)
    • 约瑟夫问题新解(以 (m = 3) 为例):

      • 刚开始有(n)个人,每次有一个活下去就把他的标号+n。

        • 1和2变成(n+1),(n+2);4和5变成(n+3),(n+4)

        • (3k+1,3k+2)变成(n+2k+1,n+2k+2)

      • 用代码模拟(详见课本);还可以换成方法加速

        • (D_0^{(q)} = 1)(D_n^{(q)} = lceil frac{q}{q-1} D_{n-1}^{(q)} ceil)(n > 0)

        • (J_q(n) = qn+1 - D_k^{(q)})(k)是最大的使得答案不是负数的值

    mod:二元运算

    • (x mod{0} = x)

    • (c (x mod{y}) = (cx) mod{(cy)})

    • (n = lfloor frac{n}{m} floor + lfloor frac{n + 1}{m} floor + ... lfloor frac{n + m - 1}{m} floor)

    • (n = lceilfrac{n}{m} ceil + lceil frac{n - 1}{m} ceil + ... lceilfrac{n - m + 1}{m} ceil)

    • (lfloor mx floor = lfloor x floor + lfloor x + frac{1}{m} floor + ... lfloor x + frac{m - 1}{m} floor)

    底和顶的和式

    • (sum_{0 le k < n} lfloor sqrt{k} floor)

      • method1 : (sum_{m = 1}^{sqrt{n}} ((m+1)^2 - m^2) m)

      • method2 : (sum_{m=1}^{sqrt{n}} n - m^2),线性性质

    • (alpha)是无理数,则({nalpha})(n->infty)时在[0,1)之间是一致分布的

      • 可以直接当做积分?
    • (sum_{0 le k < m} lfloor frac{nk + x}{m} floor)

      • 原式(= sum_{0 le k < m} lfloor frac{x + nk~mod~m}{m} floor + frac{kn}{m} - frac{kn~mod~m}{m}).

        • 第二部分是个等差数列,(frac{(m-1)n}{2})

        • (d = gcd(n,m)),则(kn~mod~m)会遍历(0,d,2d,...m-d)。每个数出现(d)次。

        • 第三部分也是等差数列,(- frac{m-d}{2})

        • 第一部分:(d*(lfloor frac{x}{m} floor+ lfloor frac{x+d}{m} floor + .... + lfloor frac{x+m-d}{m} floor) = d lfloor frac{x}{d} floor)

      • 发现将(n,m)意义对调,答案不变。

        • 本质上这是在数坐标轴在一条直线下方有多少点,(n,m)对调相当于转坐标轴。

    数论

    整除性

    • 拓展欧几里得算法

    素数

    • 算术基本定理(唯一分解定理)

    素数的例子

    • 素数有无穷多个

      • (M = 2 imes 3 imes 5 imes .... imes P_n + 1),与(P_1,...,P_n)全部互质,又多出一个“质数”(事实上不一定是质数)

      • (e_n = e_1 e_2 ... e_{n-1} + 1 = e_{n-1}^2 - e_{n-1} + 1)

        • 封闭形式:(e_n = lfloor E^{2^n} + frac{1}{2} floor),(E = 1.264)
    • 梅森数

      • (2^p - 1)(p)是质数。但并不是所有梅森数都是素数。
    • 质数密度

      • 偶数比完全平方数更“稠密”,(1-n)(frac{n}{2})个偶数;有(sqrt{n})个完全平方数。

      • $P_n $ ~ (n ln n)(pi(x)) ~ (frac{x}{ln x});故质数个数比偶数少,比完全平方数多。

    阶乘的因子

    • 阶乘以指数方式增长:斯特林公式

    • (epsilon_p(n!) = sum_{k ge 1} lfloor frac{n}{p^k} floor le frac{n}{p-1})

      • (p=2)时,(epsilon_2(n!) = n - v_2(n))(v_2(n))为二进制上1的个数
    • 素数有无穷个的另一种证明:

      • (p^{epsilon_{p}(n!)} le p^{n/(p-1)} le 2^n)

      • 一个质数只能对(n!)产生(2^n)的贡献,如果质数个数有限,取(n)足够大就会产生矛盾

    互素(Stern-Brocot树)

    • 用于构造所有(m perp n)的非负分数

    • 构造方式

      • 第一层只有(frac{0}{1})(frac{1}{0})

      • (k+1)层的分数构成 为 第(k)层的所有分数 加上 第(k)层相邻两个分数,分子和分母分别相加得到

        • (frac{m}{n},frac{m'}{n'} -> frac{m+m'}{n+n'})
    • 性质

      • 每一层的每对相邻的分数都满足(m'n - mn' = 1)

        • 归纳法,第一层是对的;每次(frac{m}{n},frac{m'}{n'})会新建(frac{m+m'}{n+n'}),分别验证。
      • 为什么(frac{n+n'}{m+m'})是最简分数?

        • 利用拓展欧几里得,因为(m'n - mn' = 1),说明(ax+by=1)成立,所以(gcd=1).
      • 是否会重复出现分数?

        • 不存在的,这是一棵严格的二叉搜索树。因为$ frac{m}{n} < frac{m+m'}{n+n'} < frac{m'}{n}$.
      • 是否有分数遗漏?

        • 不存在的,推导可证明:(a+b ge m'+n'+m+n). 每一步右式都会增加,在(a+b)步以内就可以找到解。

        • 该式说明:(frac{m'+m'}{m+n})是[(frac{m}{n}),(frac{m'}{n'})]之间分子加分母和最小的分数???这可离不开第一条性质!

    • 应用

      • 分数定位

        • (2 imes 2)的矩阵存下每个分数的左右祖先,构造矩阵(L)(R)。到左儿子则右乘(L),右儿子则右乘(R).

        • 法一:每次右乘一个(L,R),判断大小。

        • 法二:利用左乘。如果分子大,说明左乘了(R),不然左乘了(L)可以用倍增定位(O(log n)).

      • 无理数定位

        • 用SB树逼近和二分逼近效果差不多

          
          if a < 1 then
          
          output(L)
          
              a = a/(1-a)
          
          else
          
          output(R)
          
          a = a - 1
          
          
    • 拓展:Farey级数

      • 阶为(N)的法里级数为(F_N),它由所有分母不超过(N)的最简分数组成。

      • (F_N)构造:从(F_{N-1})继承,在(F_{N-1})中相邻(frac{m}{n})(frac{m'}{n'}),满足(n+n'=N)的中间,加入分母为N的数。

    同余关系

    • (2^{2n} - 1)是3的倍数,因为(2^2 pmod{3} = 1)

    • $ad equiv bd pmod{md} $ 等价于 (a equiv b pmod{m}).

    • (ad equiv bd pmod{m})等价于(a equiv b pmod{frac{m}{gcd(m,d)}}).因为剩下的因子可以用逆元除掉。

    • (a equiv b pmod{m})(a equiv b pmod{n}),则(a equiv b pmod{lcm(n,m)}).因为(a-b)既是n的倍数也是m的倍数

    独立剩余

    • 剩余系(Res(x) = (x mod m_1, cdots,x mod m_r))(m_i perp m_j).

      • 每个分量上可以独立地进行运算,相当于高精度

      • 例子:计算大矩阵的行列式,选取若干质数,除法变成逆元;最后CRT合并起来!

    • CRT

      • 相当于要找到(1,0,0),(0,1,0),(0,0,1)这些分量对应的数;用拓展欧几里得求出逆元。
    • (x^2 equiv 1 pmod{m})解的个数

      • (m)分解成若干个(p^k),改写成((x-1)(x+1) equiv 0 pmod{p^k}).

      • (p e 2)时,只有两个解1和p-1

      • (p=2)时,若(k=1)解为1;(k=2)时解为1,3;(k > 2)时,(x-1)(x+1)可以都是2的倍数,但是不可能都是4的部分,所以其中一个要是(2^{k-1})的倍数。所以有4个解。

      • (r)为质因子个数,答案为(2^{r - [2|m]+[4|m]+[8|m]}).

    进一步的应用

    • (0, n, 2n, 3n,....,(m-1)n pmod{m})(0,d,2d,...,m-d)重复d遍;(d = gcd(n,m))

    • 费马大定理:(a^n + b^n = c^n)(n > 2)时没有正整数解

    • 费马小定理:(n^{p-1} equiv 1 pmod{p}),(n perp p)

      • 证明:(n*2n*.....*(p-1)n equiv (p-1)!)
    • Miller_Rabin:验证(2^{32}+1)是不是质数?

      • 若是质数,应用费马小定理:$3{2{32}} equiv 1 pmod{2^{32}+1} $.矛盾
    • 威尔逊定理:(n)是质数时,((n-1)! equiv -1 pmod{n})

      • 除了1和(n-1),其他数的逆元两两匹配,所以((n-1)! equiv n-1 mod{n})

    (varphi)函数和(mu)函数

    • 欧拉定理:(n^{varphi(m)} equiv 1 pmod{m})(n perp m)

      • 拓展欧拉定理,处理(n)(m)不互质的情况。
    • 莫比乌斯反演:(g = f * 1)等价于(f = g*mu)

      • 广义莫比乌斯反演:(g(x) = sum_{d ge 1} f(x / d))等价于(f(x) = sum_{d ge 1} mu(d) g(x / d))
    • 积性的传递性

      • (g(m) = sum_{d|m} f(d))

      • 左右任何一边是积性函数,都可以推出剩下一边是积性函数。

    • 杜教筛:求(Phi(x) = sum_{1 le k le x} phi(k))

      • (sum_{d ge 1} Phi(frac{x}{d}) = frac{x(x+1)}{2});考虑所有(0 le m < n le x)的分数,d为分子和分母的(gcd).

      • 预处理小的(Phi(m)),分块递归求解,时间复杂度(O(n^{frac{2}{3}})).

    • Polya经典题:求解长度为(m),颜色数为(n)的不同项链个数

      • 考虑一种项链会被计算多次:(frac{1}{m} sum_{d | m} phi(d) n^{frac{m}{d}})

    二项式系数

    基本恒等式

    • 定义(此定义和之前的不一样)

      • 当整数(k < 0)(inom{n}{m} = 0),否则(inom{n}{m} = frac{n^{underline{m}}}{m!})

      • 当不是整数时,可以用广义阶乘,取极限;如(inom{frac{1}{2}}{n})

    • 性质

      • (inom{-1}{k} = (-1)^k)

      • (n < 0)时,(inom{n}{n} = 0)

      • (n<0)时,不满足对称性(inom{n}{k} = inom{n}{n-k})

      • 加法公式(inom{r}{k} = inom{r-1}{k-1} + inom{r-1}{k});由此可以拓展出(r<0)的情况。

    • 恒等式

      • 吸收恒等式:(inom{r}{k} = frac{r}{k} inom{r-1}{k-1})(k inom{r}{k} = r inom{r-1}{k-1})

      • 对角线求和:(sum_{k le n} inom{r+k}{k} = inom{r+n+1}{n})

      • 上指标求和:(sum_{0 le k le n} inom{k}{m} = inom{n+1}{m+1})

      • 二项式定理:((x+y)^r = sum_{k} inom{r}{k} x^k y^{r-k})

      • 上指标反转(inom{r}{k} = (-1)^k inom{k-r-1}{k}),当(r)是负数时可以用这种方法快速求解!!!

      • 同行交错和(sum_{k le m} inom{r}{k} (-1)^k = sum_{k le m} inom{k-r-1}{l} = inom{-r}{m} = (-1)^m inom{r-1}{m})

      • 双选恒等式(inom{r}{m} inom{m}{k} = inom{r}{k} inom{r-k}{m-k})

      • 范德蒙卷积(sum_{k} inom{r}{k} inom{s}{n-k} = inom{r+s}{n})表5-3有多种形式,可以查表!

    基本练习

    • (sum_{k} inom{m}{k} / inom{n}{k} = frac{n+1}{n+1-m}),双选恒等式

    • (sum_{k} k inom{m-k-1}{m-n-1}/ inom{m}{n} = frac{n}{m-n+1}),用吸收恒等式

    • (Q_n = sum_{k le 2^n} inom{2^n - k}{k} (-1)^k),递推式,找规律,有循环节

    • (sum_k k inom{m-k-1}{m-n-1}),把(k)写成(inom{k}{1}),用范德蒙卷积

    • (sum_{k} inom{n}{k} inom{s}{k} k = s inom{n+s-1}{n-1}),用吸收恒等式,再范德蒙卷积

    • (sum_{k} inom{n+k}{2k} inom{2k}{k} frac{(-1)^k}{k+1}),先用双选恒等式,把(2k)去掉;再用吸收恒等式, 把(frac{1}{k+1})拿掉;然后上指标翻转,最后范德蒙卷积

    • 问题七和问题八用和式代替一个组合数,技巧性太强;不如用后面的超几何

    处理的技巧

    • 取一半

      • (r^{underline{k}} (r - frac{1}{2})^{underline{k}} = (2r)^{underline{2k}} / 2^{2k})

      • 由此可以推出:(inom{- frac{1}{2}}{n} = (frac{-1}{4})^n inom{2n}{n})

    • 高阶差分

      • (Delta f(x) = f(x+1) - f(x))(Delta^n f(x) = sum_{k} inom{n}{k} (-1)^{n-k} f(x+k))

      • 多项式可以用斯特林数改写成下降幂多项式,稍作修改可以写成牛顿级数:

        • (f(x) = sum_d c_d inom{x}{d}),牛顿级数的求导非常方便;书上还写着一种(O(n^2))的求牛顿级数系数的方法。

        • (sum_k inom{n}{k} (-1)^k (a_0 + a_1k + ... + a_n k^n) = (-1)^n n! a_n)

    • 反演

      • (g(n) = sum_{k} (-1)^k inom{n}{k} f(k))等价于(f(n) = sum_{k} (-1)^k inom{n}{k} g(k))

      • 二项式反演(g(n) = sum_{k} inom{n}{k} f(k))等价于(f(n) = sum_{k} (-1)^{n-k} inom{n}{k} g(k))

        • 本质就是令(f'(n) = (-1)^n f(n))
      • 重排公式:(D(n) = n! sum_k frac{(-1)^k}{k!})(D(n) = lfloor frac{n!}{e} + frac{1}{2} floor + [n == 0])

    生成函数

    • ((1+z)^r (1+z)^s = (1+z)^{r+s}),该式子可以直接证明范德蒙恒等式

    • ((1-z)^r (1+z)^r = (1-z^2)^r)(sum_k inom{r}{k} inom{r}{n-k} (-1)^k = (-1)^{n/2} inom{r}{n/2})

    • (frac{1}{(1-z)^{n+1}} = sum_{k ge 0} inom{n+k}{n} z^k)(frac{z^n}{(1-z)^{n+1}} = sum_{k ge 0} inom{k}{n} z^k)

    • 乘上(frac{1}{1-z})相当于做前缀和

    • 广义部分待补

    超几何函数

    • 定义:(F(a_1...a_m;b_1...b_n;z) = sum_{k ge 0} frac{prod a_i^{ar{k}} z^k}{prod b_i^{ar{k}} k!})

    • 转化:(frac{t_{k+1}}{t_k})是一个关于(k)的有理函数,分子作为上参数,分母作为下参数

    • 广义阶乘和(Gamma)函数用于解释退化的情况

    • 查表(F(a,b;c;1))(F(a,b,-n;c,a+b-c-n+1;1)),SAA恒等式

    超几何变换

    • 超几何函数通用解法就是查表,本章介绍几种技巧拓展表库

      • 反射定律;习题25、26
    • 求导,移位:

      • (frac{d}{dz} F(ai;bi;z) = frac{a_1...a_m}{b_1...b_n} F(a_i+1;b_i+1;z))

      • ((vartheta + a_1) F(a_1,...a_m;b_1...b_n;z) = a_1 F(a1+1,a_2,...,a_m;b_1...b_n;z))

      • ((vartheta + b_1 -1) F(a_1,...a_m;b_1...b_n;z) = (b_1 - 1) F(a1,a_2,...,a_m;b_1-1,b_2...b_n;z))

      • (vartheta)(z frac{d}{dz})操作

      • 这个技巧可以用于解微分方程

    部分超几何和式

    • 利用差分法,试图找出函数满足(t_k = T_{k+1} - T_{k}),从而可以求解(sum_{0 le k le n} t_k)

    • (Gosper)算法

      • 找出(p(k),r(k),q(k)),满足(frac{t_{k+1}}{t_k} = frac{p(k+1)}{p(k)} frac{q(k)}{r(k+1)})

      • 求解(s(k)),满足(p(k) = q(k) s(k+1) - r(k) s(k))

      • 得到(T(k) = frac{r(k)s(k)t(k)}{p(k)})

    机械求和法

    • 机械求和法是个非常繁琐的算法,用于求解给定n,对(k)(0)(infty)求和。不能求(k)的部分和

    • 思路是定义新的函数,应用(Gosper)算法,得到(S_n)的递推式。

    • 详见书上的例子。

    特殊的数

    斯特林数

    • 第一类斯特林数([^n_k]),第二类斯特林数({ ^n_k }).

      • ({^n_k} = k {^{n-1}_k} + {^{n-1}_{k-1}})

      • ([^n_k] = (n-1)[^{n-1}_k] + [^{n-1}_{k-1}])

      • ([^n_k] ge {^n_k}),等号成立,当且仅当(k=n-1)(k=n)

      • (sum_{k=0}^n [^n_k] = n!)

    • 幂之间转换(均可用归纳法证明)

      • (x^n = sum_k {^n_k} x^{underline{k}})

      • (x^{ar{n}} = sum_k [^n_k] x^k)

      • (x^{underline{n}} = (-1)^n (-x)^{ar{n}})

      • (x^n = sum_k {^n_k} (-1)^{n-k} x^{ar{k}})

      • (x^{underline{n}} = sum_k [^n_k] (-1)^{n-k} x^k)

    • 反转公式(应用两次幂转换公式即可)

      • (sum_k [^n_k] {^k_m} (-1)^{n-k} = [m=n])

      • (sum_k {^n_k} [^k_m] (-1)^{n-k} = [m = n])

    • 应用加法原则拓展至负数,有([^n_k] = {^{-k}_{-n}})

    • 书上还有一大堆用于前缀和、卷积的恒等式,可用于查表。

    欧拉数

    • (<^n_k>)表示长度为(n)的排列(pi),有(k)个位置满足(pi_j < pi_{j+1}),即升高位置

      • (<^n_k> = <^n_{n-1-k}>)

      • (<^n_k> = (k+1) <^{n-1}_{k}> + (n-k)<^{n-1}_{k-1}>)

      • (x^n = sum_k <^n_k> inom{x+k}{n}),天呐,这个式子的组合意义是啥!!!

      • 书上还有一些奇奇怪怪的恒等式哦!还有一个通项式

    • 二阶欧拉数:(2n)个数,(k)个上升,且每对(x)之间其他数都要大于(x)

      • (<<^n_k>> = (k+1) <<^{n-1}_{k}>> + (2n-1-k)<<^{n-1}_{k-1}>>)

      • (sum_k <<^n_k>> = frac{(2n)^{underline{n}}}{2^n})

    • 斯特林多项式(由书上的恒等式推出)

      • (sigma_n(x) = [^x_{x-n}] / (x(x-1) cdots (x-n))),其中(sigma_n(x))的次数为(n-1)

      • 斯特林多项式可以由二阶欧拉数给出,于是可以处理系数为斯特林数的的生成函数的卷积。

    调和数

    • (H_n = sum_{k=1}^n frac{1}{k})

      • 发散,且(ln_n < H_n < ln n+1)
    • 例题:

      • ([^{n+1}_2] = n[^n_2]+[^n_1] = n[^n_2]+(n-1)!)

      • 两边除以(n!),求递归式:([^{n+1}_2] = n! H_n)

    • (r)次调和数:(H^{(r)}_n = sum_{k=1}^n frac{1}{k^r})

      • (ln(frac{k}{k-1}) = - ln(frac{k-1}{k}) = frac{1}{k} + frac{1}{2k^2} + frac{1}{3k^3}+ cdots)

      • (k)从2-n求和:(ln n -ln 1 = (H_n - 1) + frac{1}{2} (H^{(2)}_n - 1) - .....)

      • 移项后,可以估计(H_n - ln n)的值,记为欧拉常数(gamma)

    调和求和法

    • (sum_{0 le k < n} inom{k}{m} H_k)

      • 利用分部求和法,(u(k) = H_k)(Delta v(k) = inom{k+1}{m+1} - inom{k}{m+1} = inom{k}{m})

      • 利用吸入恒等式

    • (S_n = sum_{1 le k le n} frac{H_k}{k})

      • (S_n = sum_{1 le j le k le n} frac{1}{j*k} = frac{1}{2} ( (sum_{1 le k le n} frac{1}{k})^2 + sum_{1 le k le } frac{1}{k^2} ))

      • 第二章的技巧

    • (U_n = sum_{k ge 1} inom{n}{k} frac{(-1)^{k-1}}{k} (n-k)^n)

      • ((n-k)^n)二项式展开,交换顺序,转化为高阶差分,利用恒等式;得(U_n = n^n (H_n - 1))

    伯努利数

    • 求解幂和数

      • (S_m(n) = sum_{k=0}^{n-1} k^m = frac{1}{m+1} sum_{k=0}^m inom{m+1}{k} B_k n^{m+1-k})

      • (sum_{j=0}^m inom{m+1}{j} B_j = [m = 0])

      • 可以用扰动法+归纳法证明

    • 生成函数的定义:(frac{z}{e^z-1} = sum_{n ge 0} B_n frac{z^n}{n!})

    • 用伯努利数为系数表示三角函数

      • ( an z = sum_{n ge 0} (-1)^{n-1} 4^n (4^n - 1) B_{2n} frac{z^{2n-1}}{(2n)!})
    • 伯努利数和斯特林数的关系

      • (S_m(n) = sum_{j ge 0} {^m_j} frac{1}{j+1} sum_{k ge 0} (-1)^{j+1-k} [^{j+1}_k] n^k)

      • 由此建立恒等式

    斐波那契数

    • 恒等式

      • (F_{n+k} = F_k F_{n+1} + F_{k-1} F_n);考虑走楼梯

      • (F_{2n} = F_n F_{n+1} F_n F_{n-1});从而(F_{2n})(F_n)的倍数,归纳可得(F_{kn})(F_n)的倍数

      • (gcd(F_m,F_n) = F_{gcd(m,n)});由上式推出

      • (sum_{k=0}^n F_k = F_{n+2} - 1);归纳即可

      • (sum_{k=1}^n F_k^2 = sum_k F_k (F_{k+1} - F_{k-1}) = F_{n+1} F_n);裂项相消

      • (F_n = frac{1}{sqrt{5}}(phi^n - hat{phi^n}));其中(phi = frac{sqrt{5} + 1}{2}),为黄金分割

      • (F_{n+1} = sum_{k=0}^n inom{n-k}{k})

    • 斐波那契数系

      • (j >> k) 等价于(j ge k +2)

      • 每个整数都有唯一的表示:(n = F_{k_1} + F_{k_2} + ..... + F_{k_r})

      • (n = (b_mb_{m-1}cdots b_2)_F),因为(b_1=b_2=1),从2开始表示唯一

      • 能表示的最大值为(F_{m+2} - 2)

      • 斐波那契奇数是指表示中,最后一位是1的数;偶数类似。

    连项式

    • 定义

      • (K() = 1)

      • (K(x_1) = x_1)

      • $K_n(x_1,cdots,x_n) = K_{n-1}(x_1,cdots, x_{n-1}) x_n + K_{n-2}(x_1,cdots,x_{n-2}) $

    • 性质

      • (K_n(1,1,...,1) = F_{n+1})

      • 摩尔斯码:相当于可以放一些长度为2的多米诺骨牌;如果(x_i)不在,必然有相邻的(x_{i+1})或者(x_{i-1})与之对应

      • (K_n(z,z, cdots, z) = sum_{k=0}^{n} inom{n-k}{k} z^{n-2k})

      • (K_n(x_n,...,x_1) = K_n(x_1,...,x_n))

      • (K (x_1,...x_m,x_{m+1},...x_{m+n})= K(x_1,...x_m) K(x_{m+1},...,x_{m+n}) + K(x_1,...,x_{m-1}) K(x_{m+2},...x_{m+n}))

    • 连项式与连分数

      • (a_0 + frac{1}{a_1 + frac{1}{a_2 + frac{1}{a3}}} = frac{K(a_0,a_1,a_2,..,a_3)}{K(a_1,a_2,a_3,)});归纳之

      • (frac{K(a_0,a_1,a_2,a_3+1/a_4)}{K(a_1,a_2,a_3+1/a_4)} = frac{K(a_0,a_1,a_2,a_3,a_4)}{K(a_1,a_2,a_3,a_4)});将连分数最后一位变化

    • 连项式与Stern-Brocot树

      • 假设一个分数为(R^{a_0},L^{a_1},R^{a_2},L^{a_3} ... R^{a_{n-2}}L^{a_{n-1}})

      • (F(R^{a_0}L^{a_1}R^{a_2}L^{a_3} ... R^{a_{n-2}}L^{a_{n-1}}) = frac{K(a_0,a_1,...a_{n-1},1)}{K(a+1....a_{n-1},1)})

      • 由此可以在连分数和SB树之间快速转换

    生成函数

    多米诺理论与换零钱

    • 用多米诺骨牌铺3*n矩形

      • (U_n)表示(3 imes n)的方案,(V_n)表示(3 imes n)缺一角的方案

        • (U_n = 2 V_{n-1} + U_{n-2} + [n == 0])

        • (V_n = U_{n-1} + V_{n-2})

      • 写成生成函数

        • (U(x) = 2x V(x) + x^2 U(x) + 1)

        • (V(x) = x U(x) + x^2 V(x))

      • 求解

        • (V(x) = frac{x}{1-x^2} U(x))

        • $U(x) = 1 + frac{2x2}{1-x2} U(x) + x^2 U(x) $

      • 若将(U(x))的封闭形式展开,可以得到(U_n)的封闭形式;最后通过组合式的恒等式还可以化简

    • 换零钱

      • 和OI经典题“食物”类似

      • 有无限个价值为(m)的硬币,其生成函数为(1+x^m+x^{2m}+.....=frac{1}{1-x^m})

    • 划分数

      • (frac{1}{(1-z)(1-z^2)(1-z^3).....})(z^n)前系数为(n)的划分数,意义为用无穷个1-n凑成(n)的方案数

    基本策略

    • 运算

      • 收敛性不作要求,因为变量(z)仅仅表示一个特征,我们只在乎(z^n)前的系数

      • 左移时,要把低位“减掉”,再除以(z^m)

      • (G(cz) = sum_n g_n c^n z^n)(G(z^m) = sum_n g_n z^{nm})

      • 求导;求导+右移(每一位乘上(n));积分;左移+积分(每一位除以n)

      • 卷积

      • 前缀和:乘上(frac{1}{1-z})

    • 常见生成函数

      • <1,-1,1,-1,1,-1,1,-1,......>;(frac{1}{1+z})

      • <1,0,1,0,1,0,1,0,.......>; (frac{1}{1-z^2})

      • <1,2,4,8,16,....>;(frac{1}{1-2z})

      • <1,4,6,4,1,0,0,...>; ((1+z)^4)

      • <1,c,(inom{c+1}{2}),(inom{c+2}{3}),.....>;(frac{1}{(1-z)^c})

      • <0,1,1/2,1/3,1/4,.....>;(ln frac{1}{1-z});积分

      • <0,1,-1/2,1/3,-1/4,....>; (ln(1+z));积分

      • <1,1,1/2,1/6,1/24,.....>;(e^z)

    • 提取

      • (frac{G(z) + G(-z)}{2})提取偶数项

      • (frac{G(z) - G(-z)}{2})提取奇数项

    解递归式

    • 再探斐波那契数

      • (g_n = g_{n-1} + g_{n-2}+[n=1]);写递归式时要注意写出边界项

      • (G(z) = z G(z) + z^2 G(z) + z) ;可推出(G(z) = frac{z}{1-z-z^2})

      • 求解部分分式(R(z) = frac{P(z)}{Q(z)})

        • (frac{a}{(1-pz)^{m+1}} = sum_{n ge 0} inom{m+n}{m} a p^n z^n)

        • 目标将(R(z))转化成:(sum_i frac{a_i}{(1-p_i z)^{m_i + 1}});就可以得到(g_n)的封闭形式

        • 假设(Q(z) = q_0 + q_1 z + .... + q_m z^m),则令(Q^R(z) = q_0 z^m + q_1 z^{m-1} + .... q_m)

        • 求解(Q^R)的根,即(Q^R(z) = q_0 (z-p_1)...(z-p_m)),则(Q(z) = q_0 (1-p_1 z)...(1-p_mz))

        • 既然求出分母的根,然后将其拆成(frac{..}{1-p_1z}+....frac{..}{1-p_mz})

        • 当根互不相同时,可以用高斯消元?或者用书上的定理。

      • 事实上,求解部分分式的过程就是解特征方程

    • 带几分随机的递归式

      • (g_n = g_{n-1} + 2g_{n-2}+(-1)^n[n ge 0] + [n=1])

      • 解得(G(z)=frac{1+z+z^2}{(1-2z)(1+z)^2});用书上另一个公式来对有重根的分母进行部分分式

    • 互相递归的数列(和解方程类似)

    • 换零钱封闭形式(用于OI题,类似于Code Chef的CHANGE)

    • 发散级数(超几何解微分方程)

    • 完全返回的递归式

      • 求解扇形的生成树数量

      • 分析最后一个顶点的连边,可得

        • (f_n = f_{n-1} + sum_{k < n} f_k + [n > 0])
      • 前缀和用乘上(frac{1}{1-z})表示:

        • (F(z) = z F(z) + F(z) frac{z}{1-z} + frac{z}{1-z})
      • 求部分分式,得(f_n = F_{2n}),即偶数位斐波那契数列

    特殊的生成函数

    • 表7-3给出各种系数为特殊数的生成函数,包括斯特林数、欧拉数、伯努利数

    • (frac{1}{(1-z)^{m+1}} ln frac{1}{1-z} = sum_{n ge 0} (H_{m+n}- H_m) inom{m+n}{n} z^n)

      • (frac{1}{(1-z)^{x+1} } = sum_n inom{x+n}{n} z^n)

      • 左边:((1-z)^{-x-1}=e^{(x+1)ln(1/(1-z))}),微分后,为(frac{1}{(1-z)^{m+1}} ln frac{1}{1-z})

      • 右边:(inom{x+n}{n})微分后,为((frac{1}{x+1} + frac{1}{x+2} .... frac{1}{x+n})),等于(H_{x+n} - H_x)

      • 对复杂的乘积求微分,通常将原式保留,并提取出系数,比直接写成和式方便。

    • 特殊情况:(frac{1}{1-z} ln frac{1}{1-z} = sum_n H_n z^n)

    卷积

    • 斐波那契卷积

      • (sum_{k=0}^n F_k F_{n-k})等价于(F^2(x)[z^n])
    • 调和卷积

      • (T_{m,n} = sum_{0 le k < n} inom{k}{m} frac{1}{n-k})

      • (sum_{n ge 0} inom{n}{m} z^n = frac{z^m}{(1-z)^{m+1}}),且(sum_{n > 0} frac{z^n}{n} = ln frac{1}{1-z})

      • (T_{m,n} = [z^n]frac{z^m}{(1-z)^{m+1}} ln frac{1}{1-z} = (H_n - H_m) inom{n}{n-m})

    • 卷积的卷积

      • 之前的扇形生成树个数,可以认为有一些链,需要从根向他们连边。

      • (f_n = sum_{m > 0} sum_{k_1+...+k_m=n} k_1k_2...k_m)

      • (F(z) = G(z) + G(z)^2 + G(z)^3 + .... = frac{G(z)}{1-G(z)})

    • 卷积的递归式

      • 卡特兰数的括号解释:(C_n = sum_k C_k C_{n-1-k} + [n = 0])

      • (C(z) = z C^2(z) + 1),解得(C(z) = frac{1 (+/-) sqrt{1-4z}}{2z});加或减

      • 当取+号时,(C(0))是无穷,与事实不符;所以为减

      • 用广义二项式展开(sqrt{1-4z}),可以得到卡特兰数公式:(C_n = inom{2n}{n} frac{1}{n+1})

    • 拓展内容

      • RANEY公式、m-RANEY公式;非常美妙,可用于简化计数;

    指数生成函数

    • (hat{G}(z) = sum_{n ge 0} g_n frac{z^n}{n!})

      • (e^z)是<1,1,1,1,1.....>的EGF

      • (e^{kz})是<1,k,(k^2),.....>的EGF

    • 运算

      • 求导、积分即为左移和右移

      • 乘上(z),则右移后每一位乘上(n)

      • 二项卷积(hat{F} (z) hat{G} (z))等价于(F(z) G(z))时乘上组合数系数

    • 应用:用伯努利数表示(sum_{k = 0}^n k^m)

    • 应用:完全图的生成树个数为(n^{n-2})

      • 考虑(n-1)个点的图,选出一个生成森林,令(n)号点向所有联通块连一条边;一个大小为(k)的连通块有(k)种连边方式。

      • (t_n = sum_{m> 0} frac{1}{m!} sum_{k_1+k_2+...k_m = n-1} inom{n-1}{k_1,k_2,...,k_m} k_1k_2...k_m t_{k_1} t_{k_2}....t_{k_m})

      • (u_n = n t_n)

      • (frac{u_n}{n!} = sum_{m > 0} frac{1}{m!} sum_{k_1+k_2+...k_m = n-1} frac{u_{k_1}}{k_1!}...frac{u_{k_m}}{k_m!})

      • 用广义指数函数,(hat{U}(z) = z e^{hat{U}(z)})

    狄里克雷生成函数

    • (ar{G} (z) = sum_{n ge 1} frac{g_n}{n^z})

      • 黎曼函数(sum_{n ge 1} frac{1}{n^z}) 就是<1,1,1,1....>的DGF
    • 乘积:(h_n = sum_{d | n} f_d g_{n/d})

      • 因为莫比乌斯函数与<1,1,1,1,1>的狄里克雷卷积为1,所以它们互为
    • 当数列(<g_1,g_2,....>)是积性函数时:

      • (ar{G}(z) = prod_{ ext{p是质数}} (1+frac{g_p}{p^z} + frac{g_{p^2}}{p^{2z}}+......))

      • 书上有一些例子

    第八章在《概率统计》一书中有详细介绍;第九章在数学分析或高等数学中有详细介绍。

  • 相关阅读:
    spring事务传播机制实例讲解
    一篇关于交叉编译的文章
    Java中的泛型方法
    层序遍历打印二叉树
    寻找第K大 网易2016实习研发工程师编程题
    二叉树的非递归遍历
    二叉树 网易2016实习研发工程师编程题
    比较重量 网易2016实习研发工程师编程题
    网络地址为172.16.0.0,采用子网掩码255.255.224.0 .以下说法正确的是?
    2.7链表 回文链表
  • 原文地址:https://www.cnblogs.com/sunyaofeng/p/10048859.html
Copyright © 2011-2022 走看看