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有关的。

  • 相关阅读:
    自动交互式脚本--expect
    如何搭建web服务器 使用Nginx搭建反向代理服务器
    linux安装yaf(ubuntu教程)
    如何使用Apache的ab工具进行网站性能测试
    网虚拟主机----云服务器
    handlebars Helper用法
    网络基础知识学习
    使用清华开源镜像安装tensorflow
    安卓开发笔记(二十五):ViewPager的简单介绍和使用
    轻松搞定表白女朋友:Android版APP (零基础也可前往Github免费下载软件)
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10324653.html
Copyright © 2011-2022 走看看