zoukankan      html  css  js  c++  java
  • 生成函数(母函数)总结

    生成函数(母函数)总结

    普通型生成函数(OGF)

    定义

    对于一个序列(a_0,a_1,a_2,a_3...),定义(G(x)=a_0+a_1x^1+a_2x^2+a_3x^3+...)为序列的母函数。

    然后。。。没了???没了。

    应用

    一些常见的生成函数((nin N^+)):

    (frac {1}{1-x}=1+x+x^2+x^3+...)
    (frac {1}{(1-x)^2}=frac {1}{1-x}*frac {1}{1-x}=1+2x+3x^2+...)
    (frac {1}{(1-x)^n}=1+nx+frac {n(n+1)}{2!}x^2+frac {n(n+1)(n+2)}{3!}x^3+...)

    一个定理

    据说是母函数最重要的定理:

    设从(n)元集合(S=lbrace a_1,a_2...a_n brace)中取出(k)个元素的组合是(b_k),
    若限定元素(a_i)出现次数集合为(M_i(1leq ileq n))
    则该组合数序列的母函数为

    [prod_{i=1}^n(sum_{min M_i}x^m) ]

    可以看出,它解决的主要是组合问题

    (Eg1)

    斐波那契数列通项。

    (Sol:)

    设斐波那契数列的母函数为

    [G(x)=0+1centerdot x^1+1centerdot x^2+2centerdot x^3+3centerdot x^4+... ]

    乘一个(x)

    [G^prime(x)=0+1centerdot x^2+1centerdot x^3+2centerdot x^4+3centerdot x^5+... ]

    两个东西减一下:

    [G(x)-G^prime(x)=0+0+1centerdot x^1+0centerdot x^2+1centerdot x^3+2centerdot x^5+...\ =x+x^2(0+1centerdot x^1+1centerdot x^2+...)\ ]

    发现上面的东西:

    [Leftrightarrow G(x)-G^prime(x)=x+x^2G(x)\ Leftrightarrow G(x)-xG(x)=x+x^2G(x)\ Leftrightarrow (x^2+x-1)G(x)=-x\ Rightarrow G(x)=frac {x}{1-x-x^2} ]

    (ecause)

    [1-x-x^2=-(x+frac{1+sqrt{5}}{2})(x+frac{1-sqrt{5}}{2})=(1-frac{1-sqrt{5}}{2}x)(1-frac{1+sqrt{5}}{2}x) ]

    ( herefore)

    [G(x)=frac 1{sqrt5}left(frac x{1-frac {1+sqrt5}{2}x}-frac x{1-frac {1-sqrt5}{2}x} ight) ]

    再利用展开式(frac {1}{1-x}=1+x+x^2+x^3+...)

    可得(G(x)=b_1x+b_2x^2+...)

    解得

    [b_n=frac{sqrt 5}{5}left((frac{1+sqrt5}{2})^n-(frac{1-sqrt5}{2})^n ight) ]

    (a_n=b_n),所以我们就求出来了。

    是不是感觉很麻烦呢?了解一下这种方法
    无缝植入


    (Eg2)

    (n)位十进制数中出现偶数个(5)的数的个数。

    (Sol:)

    (f_i)表示(i)位十进制数中出现偶数个(5)的数的个数,
    (g_i)表示(i)位十进制数中出现奇数个(5)的数的个数。

    则有

    [egin{cases} f_i=9f_{i-1}+g_{i-1}\ g_i=9g_{i-1}+f_{i-1} end{cases} ag 0 ]

    设序列(lbrace f_i brace),(lbrace g_i brace)的生成函数分别为:
    (F(x)=f_1+f_2x+...+f_nx^n+... ag1)

    (G(x)=g_1+g_2x+...+g_nx^n+... ag2)

    然后:
    ((1))两边同乘(-9x)
    (-9xF(x)=-9f_1x-9f_2x^2-9f_3x^3+... ag3)
    ((2))两边同乘(-x)
    (-xG(x)=-g_1x-g_2x^2-g_3x^3... ag4)

    ((1)+(3)+(4):)

    [F(x)-9xF(x)-xG(x)=\ (f_1+f_2x+f_3x^3+...)+(-9f_1x-9f_2x^2-9f_3x^3-...)+(-g_1x-g_2x^2-g_3x^3-...)\ =(f_1+g_1x+g_2x^2+g_3x^3+...)+(-g_1x-g_2x^2-g_3x^3-...)\ =f_1=8\ ]

    (Leftrightarrow(1-9x)F(x)-xG(x)=8 ag5)

    同理,设((6)=(2)*(-9x)),((7)=(1)*(-x))

    ((6)+(7)+(2))得:

    [(1-9x)G(x)-xF(x)=g_1=1 ag8 ]

    ((5))((8))

    [F(x)=frac {(-71x+8)}{(1-8x)(1-10x)}\ G(x)=frac {(1-x)}{(1-8x)(1-10x)} ]

    [A(x)=frac{frac 7{1-8x}+frac 9{1-10x}}2\ =frac {sum_{n=0}^{infty}7*(8x)^n+sum_{n=0}^{infty}9*(10x)^n}2\ ]

    综上

    [ herefore a_n=frac {7*8^{n-1}}2+frac {9*10^{n-1}}2 ]

    指数型母函数(EGF)

    定义

    指数型母函数由一下定理来描述:

    从多重集合(M=lbraceinfty*a_1,infty*a_2,infty*a_3...infty*a_n brace)中选出(k)个元素的排列中,
    若限定(a_i)出现次数为(M_i(1leq ileq n)),则该组合数序列的母函数为:

    [prod_{i=1}^n(sum_{min M_i}frac {x^m}{m!}) ]

    我们发现,普通型母函数标志函数为(1,x,x^2...),而指数型母函数标志函数为(1,frac {x}{1!},frac {x^2}{2!}...)
    它的意义是什么呢?
    相当于我们在计算排列总数时一个元素(a_i)出现了多次,而实际上我们只能算进去一次,所以除去(i!)

    这个玩意儿的使用过程中,会碰到奇怪的(e^x)及泰勒展开式:

    (e^x=sum_{n=0}^{infty}frac {x^n}{n!}=1+x+frac{x^2}{2!}+frac{x^3}{3!}+...+frac{x^n}{n!}+...)

    (e^{-x}=sum_{n=0}^{infty}(-1)^nfrac {x^n}{n!}=1-x+frac{x^2}{2!}-frac{x^3}{3!}+...+(-1)^nfrac{x^n}{n!}+...)

    (frac {e^x+e^{-x}}2=sum_{n=0}^{infty}frac {x^{2n}}{2n!}=1+frac {x^2}{2!}+frac{x^4}{4!}+frac{x^6}{6!}+...+frac{x^{2n}}{2n!}+...)

    (frac {e^x-e^{-x}}2=sum_{n=0}^{infty}frac {x^{2n+1}}{(2n+1)!}=1+frac {x^3}{3!}+frac{x^5}{5!}+frac{x^7}{7!}+...+frac{x^{2n+1}}{(2n+1)!}+...)

    指数型母函数应化简成如下形式:

    [G_e(x)=b_0+b_1centerdot(frac x{1!})+b_2centerdot(frac {x^2}{2!})+b_3centerdot(frac {x^3}{3!})+... ]

    这里只有(b_i)是我们需要的。
    为什么?看栗子。

    应用

    (Eg1)

    有三个数字(1),两个数字(6),一个数字(8),问能组成多少个四位数。

    (Sol:)

    实际上是多重集排列数问题,显然多重集(S=lbrace3x_1,2x_2,1x_3 brace)

    构造指数型生成函数:

    [G_e(x)=(1+x+frac {x^2}{2!}+frac {x^3}{3!})(1+x+frac {x^2}{2!})(1+x)\ =1+3x+8frac{x^2}{2!}+19frac{x^3}{3!}+38frac{x^4}{4!}+60frac{x^5}{5!}+60frac{x^6}{6!} ]

    ( herefore Ans=38)


    (Eg2)

    求有(1,2,3,4)构成,且(1)出现(2-3)次,(2)最多出现(1)次,(4)出现偶数次的五位数。

    (Sol:)

    四个数分别对应的母函数:

    • (I:) (frac {x^2}{2!}+frac {x^3}{3!})
    • (II:) (1+frac {x}{1!})
    • (III:) (1+frac {x}{1!}+frac {x^2}{2!}+frac {x^3}{3!}+...)
    • (IIII:) (1+frac {x^2}{2!}+frac {x^4}{4!}+frac {x^6}{6!}+...)

    所以有:

    [G(x)=(frac {x^2}{2!}+frac {x^3}{3!})(1+frac {x}{1!})(1+frac {x}{1!}+frac {x^2}{2!}+frac {x^3}{3!}+...)(1+frac {x^2}{2!}+frac {x^4}{4!}+frac {x^6}{6!}+...)\ = (frac16*x^2*(3+4x+x^2))*e^x*frac {e^x+e^{-x}}{2}\ = frac1{12}*x^2*(3+4x+x^2)*(e^{2x}+1) ]

    最后展开(e^{2x}),再配一下系数得出:

    (Ans=frac {1}{12}*5!*(3*frac {2^3}{3!}+4*frac {2^2}{2!}+1*frac {2^1}{1!})=140)


    (Eg3)

    求由(1,3,5,7,9)构成的(n)位数的个数,要求(3,7)出现次数为偶数。

    (Sol:)

    设满足条件的(i)位数为(a_i)

    则序列({a_i})的母函数(G_e(x))

    [=(1+frac {x^2}{2!}+frac{x^4}{4!}+frac{x^6}{6!}+...)^2(1+x+frac{x^2}{2!}+frac{x^3}{3!}+...)^3\ =frac 14(e^x+e^{-x})^2*e^{3x}\ =frac 14(e^{5x}+2e^{3x}+e^x)\ =frac 14sum_{n=0}^{infty}(5^n+2*3^n+1)*frac {x^n}{n!} ]

    ( herefore a_n=frac 14(5^n+2*3^n+1))

  • 相关阅读:
    ES 使用小结
    TruncateATable 清除一张表
    js 排序,去重
    读高性能JavaScript编程 第四章 Conditionals
    读高性能JavaScript编程 第四章 Duff's Device
    c# AOP 文章地址
    String、StringBuffer与StringBuilder之间区别
    批处理命令
    C#中的is和as操作符
    c# 入门
  • 原文地址:https://www.cnblogs.com/heyujun/p/10360058.html
Copyright © 2011-2022 走看看