【算法讲16:生成函数(理论部分)】

本文深入探讨了生成函数在数列和多项式之间的桥梁作用,通过实例展示了如何使用生成函数解决斐波那契数列等问题。此外,还讨论了数列的卷积和指数生成函数、狄利克雷级数,以及它们的卷积运算,揭示了数学在算法和序列分析中的强大工具。
摘要由CSDN通过智能技术生成

学习资源:

前置

  • 多项式,如 f ( x ) = a x 2 + b x + c f(x)=ax^2+bx+c f(x)=ax2+bx+c
  • 递推/数列,如 f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n)=f(n-1)+f(n-2) f(n)=f(n1)+f(n2)
  • 无穷求和,如 0. 9 ˙ = 1 0.\dot9=1 0.9˙=1

三个问题的关联

  • “无穷多项”的多项式 = = = 多项式+数列+无穷求和
    f ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ = ∑ i ≥ 0 a i x i \begin{aligned} f(x)&=a_0+a_1x+a_2x^2+a_3x^3+\cdots\\ &=\sum_{i\ge0}a_ix^i \end{aligned} f(x)=a0+a1x+a2x2+a3x3+=i0aixi
    这里面有一个无穷数列 [ a 0 , a 1 , a 2 , ⋯   ] [a_0,a_1,a_2,\cdots] [a0,a1,a2,]
    我们把这个函数 f ( x ) f(x) f(x) 通过多项式的无穷求和数列建立起了联系。

神奇的多项式

  • 我们令 a = [ 1 , 1 , 1 , ⋯   ] a=[1,1,1,\cdots] a=[1,1,1,]
    此时 f ( x ) = 1 + x 2 + x 3 + ⋯ f(x)=1+x^2+x^3+\cdots f(x)=1+x2+x3+
    我们带入一些值进去,看看等于什么
    f ( 1 ) = 1 + 1 + 1 + ⋯ = ∞ f(1)=1+1+1+\cdots=\infin f(1)=1+1+1+=
    f ( 1 2 ) = 1 + 1 2 + 1 4 + 1 8 + ⋯ f(\frac{1}{2})=1+\frac{1}{2}+\frac{1}{4}+\frac{1}{8}+\cdots f(21)=1+21+41+81+
    当公比 q ≠ 1 q\ne1 q=1 时这就是一个等比数列求和公式:
    f ( x ) = 1 − q ∞ 1 − q = { 1 q − 1 ∣ q ∣ < 1 ∞ ∣ q ∣ > 1 f(x)=\frac{1-q^\infin}{1-q}= \begin{cases} \frac{1}{q-1}&|q|<1\\ \infin&|q|>1 \end{cases} f(x)=1q1q={q11q<1q>1
    换句话说,我们得到了:
    1 1 − x ↔ [ 1 , 1 , 1 , ⋯   ] \frac{1}{1-x}\leftrightarrow [1,1,1,\cdots] 1x1[1,1,1,]
  • 我们之前也学过其他一些函数的多项式展开:
    s i n ( x ) ↔ [ 0 , 1 , 0 , − 1 3 ! , 0 , 1 5 ! , 0 , − 1 7 ! ⋯   ]   e x ↔ [ 1 , 1 1 ! , 1 2 ! , 1 3 ! , ⋯   ] sin(x)\leftrightarrow [0,1,0,-\frac{1}{3!},0,\frac{1}{5!},0,-\frac{1}{7!}\cdots]\\ \ \\ e^x\leftrightarrow [1,\frac{1}{1!},\frac{1}{2!},\frac{1}{3!},\cdots] sin(x)[0,1,0,3!1,0,5!1,0,7!1] ex[1,1!1,2!1,3!1,]
  • 挑战:
    F ( x ) = x + x 2 + 2 x 3 + 3 x 4 + 5 x 5 + 8 x 6 + ⋯ = ? F(x)=x+x^2+2x^3+3x^4+5x^5+8x^6+\cdots=? F(x)=x+x2+2x3+3x4+5x5+8x6+=?
    什么样的 F ( x ) F(x) F(x) 生成斐波那契数列?
    F ( x ) = f ( 0 ) x 0 + f ( 1 ) x 1 + f ( 2 ) x 2 + ⋯ x F ( x ) = f ( 0 ) x 1 + f ( 1 ) x 2 + f ( 2 ) x 3 + ⋯ x 2 F ( x ) = f ( 0 ) x 2 + f ( 1 ) x 3 + f ( 2 ) x 4 + ⋯ \begin{aligned} F(x)&=f(0)x^0+f(1)x^1+f(2)x^2+\cdots\\ xF(x)&=\qquad \qquad f(0)x^1+f(1)x^2+f(2)x^3+\cdots\\ x^2F(x)&=\qquad \qquad \qquad \qquad f(0)x^2+f(1)x^3+f(2)x^4+\cdots\\ \end{aligned} F(x)xF(x)x2F(x)=f(0)x0+f(1)x1+f(2)x2+=f(0)x1+f(1)x2+f(2)x3+=f(0)x2+f(1)x3+f(2)x4+
    可以看到,第三行加第二行可以把第一行后面的大部分内容给消掉,得到:
    ( 1 − x − x 2 ) F ( x ) = x (1-x-x^2)F(x)=x (1xx2)F(x)=x
    故,最终答案为:
    F ( x ) = x 1 − x − x 2 F(x)=\frac{x}{1-x-x^2} F(x)=1xx2x
    因此,得到了:
    x 1 − x − x 2 ↔ [ 0 , 1 , 1 , 2 , 3 , 5 , 8 , ⋯   ] \frac{x}{1-x-x^2}\leftrightarrow [0,1,1,2,3,5,8,\cdots] 1xx2x[0,1,1,2,3,5,8,]

数列的 ⌈ \lceil 生成函数 ⌋ \rfloor

  • 生成函数:函数与数列之间的桥梁。
    我们可以用函数表示各种数列:
    c ⋅ F ( x ) → 数 列 倍 增 x ⋅ F ( x ) → 数 列 右 移 [ F ( x ) − f ( 0 ) ] / x → 数 列 左 移 F 1 ( x ) ± F 2 ( x ) → 数 列 求 和 / 差 F ′ ( x ) → 数 列 乘 幂 次 + 左 移 F 1 ( x ) ⋅ F 2 ( x ) → 数 列 卷 积 \begin{aligned} c\cdot F(x)&\rightarrow 数列倍增 \\ x\cdot F(x)&\rightarrow 数列右移 \\ [F(x)-f(0)]/x&\rightarrow 数列左移 \\ F_1(x)\pm F_2(x)&\rightarrow 数列求和/差 \\ F^\prime(x) &\rightarrow 数列乘幂次+左移\\ F_1(x)\cdot F_2(x)&\rightarrow 数列卷积 \end{aligned} cF(x)xF(x)[F(x)f(0)]/xF1(x)±F2(x)F(x)F1(x)F2(x)/+
    举些例子:
    1 1 − x ↔ [ 1 , 1 , 1 , ⋯   ] x 1 − x − x 2 ↔ [ 0 , 1 , 1 , 2 , 3 , 5 , 8 , ⋯   ] 1 1 − x + x 1 − x − x 2 ↔ [ 1 , 2 , 2 , 3 , 4 , 6 , 9 , ⋯   , f ( n ) + 1 , ⋯   ] x ( 1 1 − x + x 1 − x − x 2 ) ↔ [ 0 , 1 , 2 , 2 , 3 , ⋯   , f ( n + 1 ) + 1 , ⋯   ] 2 1 − x ↔ [ 2 , 2 , 2 , ⋯   ] 1 1 − a x ↔ [ 1 , a , a 2 , a 3 , a 4 , ⋯   ] \begin{aligned} \frac{1}{1-x} &\leftrightarrow [1,1,1,\cdots]\\ \frac{x}{1-x-x^2} &\leftrightarrow [0,1,1,2,3,5,8,\cdots] \\ \frac{1}{1-x}+\frac{x}{1-x-x^2} &\leftrightarrow [1,2,2,3,4,6,9,\cdots,f(n)+1,\cdots] \\ x(\frac{1}{1-x}+\frac{x}{1-x-x^2}) &\leftrightarrow [0,1,2,2,3,\cdots,f(n+1)+1,\cdots] \\ \frac{2}{1-x} &\leftrightarrow [2,2,2,\cdots]\\ \frac{1}{1-ax} &\leftrightarrow [1,a,a^2,a^3,a^4,\cdots]\\ \end{aligned} 1x11xx2x1x1+1xx2xx(1x1+1xx2x)1x21ax1[1,1,1,][0,1,1,2,3,5,8,][1,2,2,3,4,6,9,,f(n)+1,][0,1,2,2,3,,f(n+1)+1,][2,2,2,][1,a,a2,a3,a4,]
  • 我们这里主要关注 数列卷积
    假设我们有两个无穷多项式:
    F ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ G ( x ) = b 0 + b 1 x + b 2 x 2 + b 3 x 3 + ⋯ \begin{aligned} F(x)&=a_0+a_1x+a_2x^2+a_3x^3+\cdots\\ G(x)&=b_0+b_1x+b_2x^2+b_3x^3+\cdots\\ \end{aligned} F(x)G(x)=a0+a1x+a2x2+a3x3+=b0+b1x+b2x2+b3x3+
    我们想知道 F ⋅ G F\cdot G FG 是什么?
    F ( x ) ⋅ G ( x ) = a 0 b 0 + ( a 1 b 0 + a 0 b 1 ) x + ⋯ + ( ∑ i = 0 n a i b n − i ) x n + ⋯ F(x)\cdot G(x)=a_0b_0+(a_1b_0+a_0b_1)x+\cdots+\Big(\sum_{i=0}^n a_ib_{n-i}\Big)x^n+\cdots F(x)G(x)=a0b0+(a1b0+a0b1)x++(i=0naibni)xn+
  • 试一试以下的例子
    F ( x ) ⋅ 1 1 − x F(x)\cdot \frac{1}{1-x} F(x)1x1
    我们已经知道了
    F ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ 1 1 − x = 1 + x + x 2 + x 3 + ⋯ \begin{aligned} F(x)&=a_0+a_1x+a_2x^2+a_3x^3+\cdots\\ \frac{1}{1-x}&=1+x+x^2+x^3+\cdots\\ \end{aligned} F(x)1x1=a0+a1x+a2x2+a3x3+=1+x+x2+x3+
    我们套卷积的式子,得到:
    F ( x ) ⋅ 1 1 − x = a 0 + ( a 0 + a 1 ) x + ⋯ + ( ∑ i = 0 n a i ) x n + ⋯ F(x)\cdot \frac{1}{1-x}=a_0+(a_0+a_1)x+\cdots+\Big(\sum_{i=0}^n a_i\Big)x^n+\cdots F(x)1x1=a0+(a0+a1)x++(i=0nai)xn+
  • 例子:

    S n = ∑ i = 1 n i 2 S_n=\sum_{i=1}^n i^2 Sn=i=1ni2
    我们用生成函数做:
    1 1 − x ↔ [ 1 , 1 , 1 , 1 , 1 , 1 ⋯   ] 1 ( 1 − x ) 2 ↔ [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , ⋯   ] 1 ( 1 − x ) 3 ↔ [ 1 , 3 , 6 , 10 , 15 , ⋯   ] 三 角 形 数 列 x ( 1 − x ) 3 ↔ [ 0 , 1 , 3 , 6 , 10 , 15 , ⋯   ] 向 右 移 项 1 + x ( 1 − x ) 3 ↔ [ 1 , 4 , 9 , 16 , 25 , ⋯   ] 相 加 得 到 正 方 形 数 列 x ( 1 + x ) ( 1 − x ) 4 ↔ [ 0 , 1 , 5 , 14 , 28 , 53 , ⋯   ] 所 求 \begin{aligned} \frac{1}{1-x} &\leftrightarrow [1,1,1,1,1,1\cdots]\\ \frac{1}{(1-x)^2} &\leftrightarrow [1,2,3,4,5,6,7,\cdots]\\ \frac{1}{(1-x)^3} &\leftrightarrow [1,3,6,10,15,\cdots]三角形数列\\ \frac{x}{(1-x)^3} &\leftrightarrow [0,1,3,6,10,15,\cdots]向右移项\\ \frac{1+x}{(1-x)^3} &\leftrightarrow [1,4,9,16,25,\cdots]相加得到正方形数列\\ \frac{x(1+x)}{(1-x)^4} &\leftrightarrow [0,1,5,14,28,53,\cdots]所求\\ \end{aligned} 1x1(1x)21(1x)31(1x)3x(1x)31+x(1x)4x(1+x)[1,1,1,1,1,1][1,2,3,4,5,6,7,][1,3,6,10,15,][0,1,3,6,10,15,][1,4,9,16,25,][0,1,5,14,28,53,]
    我们得到了一个生成函数:
    x ( 1 − x ) 4 + x 2 ( 1 − x ) 4 \frac{x}{(1-x)^4}+\frac{x^2}{(1-x)^4} (1x)4x+(1x)4x2
    利用超纲知识 ??? 我们知道了 ( 1 − x ) − 4 (1-x)^{-4} (1x)4 [ C n + 3 3 ] [C_{n+3}^3] [Cn+33]
    所以最终
    S n = C n + 2 3 + C n + 1 3 = n ( n + 1 ) ( 2 n + 1 ) 6 S_n=C_{n+2}^3+C_{n+1}^3=\frac{n(n+1)(2n+1)}{6} Sn=Cn+23+Cn+13=6n(n+1)(2n+1)

更多的生成函数

  • 指数生成函数:
    F ( x ) = a 0 + a 1 x + a 2 x 2 2 ! + a 3 x 3 3 ! + ⋯ F(x)=a_0+a_1x+a_2\frac{x^2}{2!}+a_3\frac{x^3}{3!}+\cdots F(x)=a0+a1x+a22!x2+a33!x3+
  • 狄利克雷级数生成函数
    F ( s ) = a 1 + a 2 2 s + a 3 3 s + a 4 4 s + ⋯ F(s)=a_1+\frac{a_2}{2^s}+\frac{a_3}{3^s}+\frac{a_4}{4^s}+\cdots F(s)=a1+2sa2+3sa3+4sa4+
  • F ⋅ G F\cdot G FG 的推导
    指数生成函数卷积推导:
    F ( x ) = a 0 + a 1 x + a 2 x 2 2 ! + a 3 x 3 3 ! + ⋯ G ( x ) = b 0 + b 1 x + b 2 x 2 2 ! + b 3 x 3 3 ! + ⋯ F ( x ) ⋅ G ( x ) = a 0 b 0 + ( a 0 b 1 + a 1 b 0 ) x + 第 三 项 + ( a 0 b 4 4 ! 0 ! + a 1 b 3 3 ! 1 ! + a 2 b 2 2 ! 2 ! + a 3 b 1 3 ! 1 ! + a 4 b 0 4 ! 0 ! ) x 4 + ⋯ F ( x ) ⋅ G ( x ) = a 0 b 0 + ( a 0 b 1 + a 1 b 0 ) x + ⋯ + ( ∑ i = 0 n a i b n − i ⋅ n ! i ! ( n − i ) ! ) x n n ! + ⋯ F ( x ) ⋅ G ( x ) = a 0 b 0 + ( a 0 b 1 + a 1 b 0 ) x + ⋯ + ( ∑ i = 0 n C n i a i b n − i ) x n n ! + ⋯ \begin{aligned} F(x)&=a_0+a_1x+a_2\frac{x^2}{2!}+a_3\frac{x^3}{3!}+\cdots\\ G(x)&=b_0+b_1x+b_2\frac{x^2}{2!}+b_3\frac{x^3}{3!}+\cdots\\ F(x)\cdot G(x)&=a_0b_0+(a_0b_1+a_1b_0)x+第三项+(\frac{a_0b_4}{4!0!}+\frac{a_1b_3}{3!1!}+\frac{a_2b_2}{2!2!}+\frac{a_3b_1}{3!1!}+\frac{a_4b_0}{4!0!})x^4+\cdots\\ F(x)\cdot G(x)&=a_0b_0+(a_0b_1+a_1b_0)x+\cdots+\Big(\sum_{i=0}^n \frac{a_ib_{n-i}\cdot n!}{i!(n-i)!}\Big)\frac{x^n}{n!}+\cdots\\ F(x)\cdot G(x)&=a_0b_0+(a_0b_1+a_1b_0)x+\cdots+\Big(\sum_{i=0}^n C_n^ia_ib_{n-i}\Big)\frac{x^n}{n!}+\cdots\\ \end{aligned} F(x)G(x)F(x)G(x)F(x)G(x)F(x)G(x)=a0+a1x+a22!x2+a33!x3+=b0+b1x+b22!x2+b33!x3+=a0b0+(a0b1+a1b0)x++(4!0!a0b4+3!1!a1b3+2!2!a2b2+3!1!a3b1+4!0!a4b0)x4+=a0b0+(a0b1+a1b0)x++(i=0ni!(ni)!aibnin!)n!xn+=a0b0+(a0b1+a1b0)x++(i=0nCniaibni)n!xn+
    狄利克雷级数卷积推导:
    F ( s ) = a 1 + a 2 2 s + a 3 3 s + a 4 4 s + ⋯ G ( s ) = b 1 + b 2 2 s + b 3 3 s + b 4 4 s + ⋯ F ( s ) ⋅ G ( s ) = a 1 b 1 + ( a 1 b 2 + a 2 b 1 ) / 2 s + ⋯ + ( a 1 b 18 + a 2 b 9 + a 3 b 6 + a 6 b 3 + a 9 b 2 + a 18 b 1 ) / 1 8 s + ⋯ F ( s ) ⋅ G ( s ) = a 1 b 1 + ( a 1 b 2 + a 2 b 1 ) / 2 s + ⋯ + ( ∑ i × j = n a i b j ) / n s + ⋯ F ( s ) ⋅ G ( s ) = ∑ n ≥ 1 ( ∑ d ∣ n a d b n / d ) / n s \begin{aligned} F(s)&=a_1+\frac{a_2}{2^s}+\frac{a_3}{3^s}+\frac{a_4}{4^s}+\cdots\\ G(s)&=b_1+\frac{b_2}{2^s}+\frac{b_3}{3^s}+\frac{b_4}{4^s}+\cdots\\ F(s)\cdot G(s) &= a_1b_1+(a_1b_2+a_2b_1)/2^s+\cdots+(a_1b_{18}+a_2b_9+a_3b_6+a_6b_3+a_9b_2+a_{18}b_1)/18^s+\cdots\\ F(s)\cdot G(s) &=a_1b_1+(a_1b_2+a_2b_1)/2^s+\cdots+\Big(\sum_{i\times j=n}a_ib_j\Big)/n^s+\cdots\\ F(s)\cdot G(s)&=\sum_{n\ge1}\Big(\sum_{d|n}a_db_{n/d}\Big)/n^s \end{aligned} F(s)G(s)F(s)G(s)F(s)G(s)F(s)G(s)=a1+2sa2+3sa3+4sa4+=b1+2sb2+3sb3+4sb4+=a1b1+(a1b2+a2b1)/2s++(a1b18+a2b9+a3b6+a6b3+a9b2+a18b1)/18s+=a1b1+(a1b2+a2b1)/2s++(i×j=naibj)/ns+=n1(dnadbn/d)/ns
  • R i e m a n n ′ s   Z e t a   F u n c t i o n Riemann's\ Zeta\ Function Riemanns Zeta Function 黎曼函数
    ζ ( s ) = 1 + 1 2 s + 1 3 s + ⋯ \zeta(s)=1+\frac{1}{2^s}+\frac{1}{3^s}+\cdots ζ(s)=1+2s1+3s1+
    其实就是狄利克雷级数,数列为 [ 1 , 1 , 1 , ⋯   ] [1,1,1,\cdots] [1,1,1,]
    还有一些性质:
    ζ 2 ( s ) = d ( 1 ) + d ( 2 ) 2 s + d ( 3 ) 3 s + ⋯ 1 ζ ( s ) = μ ( 1 ) + μ ( 2 ) 2 s + μ ( 3 ) 3 s + ⋯ \zeta^2(s)=d(1)+\frac{d(2)}{2^s}+\frac{d(3)}{3^s}+\cdots\\ \frac{1}{\zeta(s)}=\mu(1)+\frac{\mu(2)}{2^s}+\frac{\mu(3)}{3^s}+\cdots ζ2(s)=d(1)+2sd(2)+3sd(3)+ζ(s)1=μ(1)+2sμ(2)+3sμ(3)+

唯一的例题

  • 求长度为 n n n 01 01 01 字符串中不可分解字符串的个数
    不可分解指不能写成两个或多个相同字符串的拼接。
  • f ( n ) f(n) f(n) 是不能分解的个数。
    因为如果一个串有循环节 2 2 2 和循环节 3 3 3 ,那么其最小循环节为 1 1 1
    2 n = ∑ d ∣ n f ( d ) 2^n=\sum_{d|n}f(d) 2n=dnf(d)
    然后根据莫比乌斯反演去得到 (感觉视频里的式子写错了)
    f ( n ) = ∑ d ∣ n μ ( d ) 2 n d f(n)=\sum_{d|n}\mu(d)2^{\frac{n}{d}} f(n)=dnμ(d)2dn
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值