• 【生成函数学习笔记】


    P.s. 本文是菜鸡笔者整理知识点以及做书上例题搞的 可能偏鸡肋/easy,谨慎食用)

    例题:(《组合数学》习题二)

    1.求不包含连续(0)(01)序列个数。

    (f_n)表示长度为(n)的满足题意的序列个数。则(f_n=f_{n-1}+f_{n-2}.)

    解析:考虑往合法序列末尾能加的数,只有两种:(1,10.)所以分别对应(f_{n-1},f_{n-2}.)如果加(01,)相当于对(f_n)后面加(1,)所以没有遗漏。

    2.问由(X,Y,Z,U)组成的字符串且满足(U)的个数为偶数的长度为(n)的字符串有多少个。

    (F(x))为答案的指数型生成函数,对于(X,Y,Z)来讲,它们的生成函数都是(e^x,)对于(U)来说,它的生成函数是(frac{e^{-x}+e^{x}}{2})

    所以:

    [F(x)=e^{3x}cdot frac{e^{-x}+e^{x}}{2}=frac{e^{2x}+e^{4x}}{2} ]

    展开一下就是:

    [F(x)=sum_{i=0}^infty (2^{i-1}+2^{2i-1})x^icdot frac{1}{i!} ]

    故而(f_n=2^{n-1}+2^{2n-1}.)

    这里注意一点:普通型生成函数求的是 多重组合数 ,而指数型生成函数求的是 多重排列数。也就是说,指数型生成函数把同一种元素不同选法的差异给去除了。

    关于多重排列数与多重组合数:

    观察到上述例2中,(f_n=n![x^n]F(x),)这里就是“指数型生成函数求的是多重排列数”的意义所在,对于一种“组合”,把它化为排列需要乘以一个(n!.)

    例题2考虑的并不只是选法,它还考察了对于一种字母搭配,它有多少种排列,这就是这题选择指数型生成函数的原因。

    3.给定方程(sum_ {i=1}^4 x_i =r,x_1in [0,4],x_2in left{ 1,3,5,7 ight},x_3,x_4 in even<10)

    显然它们的生成函数是(F(x)=(1+x+x^2+x^3+x^4)cdot (x+x^3+x^5+x^7)cdot (x^2+x^4+x^6+x^8)^2.)

    知识点穿插:

    对于形如(1-x^n)的展开式,把它看成((1-x)cdot (1+x+...+x^{n-1}),)后者用等比数列求和知道它就是(frac{1-x^n}{1-x}.)

    所以上面式子可以重新写成:

    [F(x)=frac{1-x^5}{1-x}cdot frac{1-x^8}{1-x^2}cdot xcdot (frac{1-x^{10}}{1-x^2})^2 ]

  • 相关阅读:
    [HDU] 1016 Prime Ring Problem(DFS)
    ACM、OI等比赛中的程序对拍问题
    [POJ] 1948 Triangular Pastures (DP)
    [POJ] 1606 Jugs(BFS+路径输出)
    [百度2015春季实习生招聘附加题] 今天要吃点好的!
    Idea 搭建Maven--web项目(MVC)
    Python自动化测试框架——数据驱动(从文件中读取)
    Python自动化测试框架——数据驱动(从代码中读取)
    selenium——操作滚动条
    Python自动化测试框架——生成测试报告
  • 原文地址:https://www.cnblogs.com/h-lka/p/14471236.html
Copyright © 2020-2023  润新知