zoukankan      html  css  js  c++  java
  • [学习笔记]生成函数

    解决数列问题

    其实还是一个非常好用的东西

    利用x^n占坑。系数表示答案。优化Dp的一个重要手段

    1.线性齐次递推

    顾名思义

    $h_n=a_1*h_{n-1}+a_2*h_{n-2}+...+a_k*h_{n-k}+d_n$

    其中$d_n$是关于n的一个多项式

    可以递推

    可以矩阵乘法

    但是

    最好不过的是有通项公式!

    以下用特征方程来处理出这个通项公式

    常系数线性齐次递推

    $d_n=0$时,称为:常系数线性齐次递推

    有:$h_n-a_1*h_{n-1}+a_2*h_{n-2}+...+a_k*h_{n-k}=0$——①

    我们考虑用“等比数列的线性组合”来凑出真正h

    定义①的特征方程为:

    $x^k-a_1*x^{k-1}+a_2*x^{k-2}+...+a_k=0$

    这个方程的k个解,设为g1,g2...gk

    ①对于每一个根q,${q}^n$都是h的一个可能的通项公式(把$q^{n-k}$)乘回去即可

    ②对于每一个m重根q,$q^n,nq^n,n^2q^n.....,n^{m-1}q^n$都是h可能的根

    证明:

    对于$x^n-a_1*x^{n-1}+a_2*x^{n-2}+...+a_k*x^{n-k}=0$——③

    因式分解,有$.....(x-q)^m*x^{n-k}=0$

    对③求导,再同时乘上x

    得到$n*x^n-a_1*(n-1)*x^{n-1}+a_2*(n-2)*x^{n-2}+...+a_k*(n-k)*x^{n-k}=0$——④

    考虑因式分解的情况,一定有$(....)(x-q)^{m-1}+(......)(x-q)^m$这样,x=q还是④的解

    所以有解:nq^n

    重复下去,$q^n,nq^n,n^2q^n.....,n^{m-1}q^n$都是h可能的根

    证毕

    所以一般来看:

    线性组合也即:$h_n=c_1*{g_1}^n+{c_2}*n^m*{g_2}^n...$这样

     可以利用前几项待定系数得到

    留下个问题:

    为什么一定是这两种nq^n,q^n线性组合?

    (可以得到的是,如果是线性组合形式,每一个公比一定是一个特征根,否则不能在每一个n都得到0)

    非常系数线性齐次递推

     叠加原理:

    证明:

    然后对于一般的题

    先求出常系数齐次的部分,

    再求出非常系数的部分,然后叠加原理

    2.一般生成函数——组合

    我们考虑从多项式的角度去处理数列的问题

    对于h,g(x)=h0+h1x+h2x^2+...+hn*x^n是一个无穷多项式

    这个多项式就叫做h的生成函数

    这个x没有什么实际意义

    考虑通过x搞一些事情

    对于一个1,1,1,1,1,1,1,1,1,1....的序列

    生成函数$g(x)=1+x+x^2+....+x^n$

    对于|x|<1的时候,后面的项太多可以忽略

    可以有:g(x)=1/(1-x)

    还是没什么用

    实际上,利用|x|非常小的时候,无限的式子可以灵活变成一个有限的式子

    然后就可以处理问题了

    组合问题

    考虑构造一些多项式乘积,使得n次项系数就是$h_n$

    也就是构造一个生成函数。

    拯救世界 

    10个限制

    高精,还要用NTT优化,

    递推问题

    把齐次递推直接变成通项公式

    就是对于生成函数方程系数的一般化

    利用递推公式消掉后面的

    分母因式分解

    对于g(x)=A/(B*C),A的次数小于B,C

    然后可以裂项

    再展开就得到了通项公式

    大概分母都是(1-px)^m的形式

    对于m=1的时候,直接裂项

    m!=1的部分,对应特征方程的重根

    写成:c1/(1-px)+c2/[(1-px)^2]+....+cm/[(1-px)^m]

    解出c即可。

    展开就是指数形式了

    所以对于之前的疑问也可以证明了

    一定都是指数形式的

    (知道了这个就不用之前的齐次线性递推也可以做了,非常数好像不行?)

    3.指数生成函数——排列(多重集)

    就是变了一下形式

    令g的指数生成函数为:

    $g^{(e)}(x)=1+h_1*frac{x}{1!}+h_2*frac{x^2}{2!}+.....+h_n*frac{x^n}{n!}$

    一些性质:

    $h_i=1$时,

    $1+frac{x}{1!}+frac{x^2}{2!}+.....+frac{x^n}{n!}=e^x$

    那么有推论:

    $e^{ax}$所代表的数列是:

    $1,a,a^2,a^3,...,a^n$

     

    相对于组合数

    就是多了阶乘一步,使得多重集合的排列n!/(e1!*e2!...)能够凑出来

    得到的系数再乘上n!就是实际的答案

    就是这里就要用e来搞一搞了

    POJ3734

    列出式子

    得到的每一项的系数是∑1/(Πei!) 

    再乘n!就是答案

    充分利用:

    $1+frac{x}{1!}+frac{x^2}{2!}+.....+frac{x^n}{n!}=e^x$

    把1,-1带进去,再做和再除以2,得到偶数项的和

    然后再拆开

    考虑$e^{4x},2*e^{2x}$对应的数列

    再乘上n!

    分着拆开,后面的+1特判一下

    感觉生成函数就是

    首先这是一个在排列组合意义下,或者在递推公式中找通项公式的办法。

    1.根据排列还是组合先分两种

    2.先列出式子,使得系数和答案有关

    3.把无穷项合并

    4.把有限项再分着拆开。使得,拆开后的每一项的系数是有通项公式可循

    5.根据系数和通项公式的关系得到通项公式

    4.卷积生成函数

    先咕咕着

    有些题推出来的式子不会这么直接

    往往带有很多别的低阶多项式

    往往还涉及到求根公式和开根

    一类通过生成函数求线性递推式的方法

    就是求根,然后处理根号,求导

    求出G(x)的递推式,再求出F(x)的递推式。

    关键是消去根号和分数线


    upda:2019.5.6

    小技巧

    A

    不断求导可以配出$i^k$系数,每次多乘一个x,再求导,最后只会少了$a_0$

    B

    如果推出形如:$frac{p(x)}{q(x)}=A(x)$要求$A(x)$的递推式,其中p是n次项,q是m次项。
    则$A(x)*q(x)=p(x)$利用卷积,关注$[x^n]p(x)=[x^{n-m}]A(x)*[x^m]q(x)$即可得到$a_{n-m}$,然后下顺,即可依次得到$a_{n-m-1},a_{n-m-2}...$

    C

    $frac{P(x)}{Pi (x-a_i)^{k_i}}$化成部分分式:$sum frac{P_i(x)}{(x-a_i)^{k_i}}$
    直接通分,分子之和等于$P(x)$
    即:$P(x)=sum P_i(x) imes Pi_{j!=i}(x-a_j)^{k_j}$
    不妨考虑$modspace (x-a_i)^{k_i}$
    可以得到:$P(x)=P_i(x) imes Pi_{j!=i}(x-a_j)^{k_j}space modspace (x-a_i)^{k_i} $

    考虑进行分治处理:类似多点求值,进入左半边的时候,整体$modspace Pi_{j>mid}(x-a_j)^{k_j} $

    至于还需要:$Pi_{j!=i}(x-a_j)^{k_j}$还是类似分治

    再来一个多项式求逆即可得到:$Pi(x)$

    用处:可以继续化简$ frac{P_i(x)}{(x-a_i)^{k_i}}=sum_{j=1}^{k_i} frac{b_j}{(x-a_i)^{j}}$

    分子是一个常数,分母可以直接展开,获得这一项的O(1)公式。求通项的时候,分别对这$sum k_i$个的第$[x^n]$进行求和。O(k)求一项。胜过无脑快速递推的O(klogk)

    D

    $w^{i imes (n-i)}=w^{(C(n,2)-C(i,2)-C(n-i,2))}$然后除过去和n有关的。

  • 相关阅读:
    模板 无源汇上下界可行流 loj115
    ICPC2018JiaozuoE Resistors in Parallel 高精度 数论
    hdu 2255 奔小康赚大钱 最佳匹配 KM算法
    ICPC2018Beijing 现场赛D Frog and Portal 构造
    codeforce 1175E Minimal Segment Cover ST表 倍增思想
    ICPC2018Jiaozuo 现场赛H Can You Solve the Harder Problem? 后缀数组 树上差分 ST表 口胡题解
    luogu P1966 火柴排队 树状数组 逆序对 离散化
    luogu P1970 花匠 贪心
    luogu P1967 货车运输 最大生成树 倍增LCA
    luogu P1315 观光公交 贪心
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10324653.html
Copyright © 2011-2022 走看看