解决数列问题

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

利用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)\times \Pi_{j!=i}(x-a_j)^{k_j}$
不妨考虑$mod\space (x-a_i)^{k_i}$
可以得到:$P(x)=P_i(x)\times \Pi_{j!=i}(x-a_j)^{k_j}\space mod\space (x-a_i)^{k_i} $

考虑进行分治处理:类似多点求值,进入左半边的时候,整体$mod\space \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\times (n-i)}=w^{(C(n,2)-C(i,2)-C(n-i,2))}$然后除过去和n有关的。

转载于:https://www.cnblogs.com/Miracevin/p/10324653.html

[学习笔记]生成函数相关推荐

  1. [学习笔记]导数与定积分简单入门

    本文章是[学习笔记]生成函数进阶的一部分 1.导数 1.1 定义 导数: 导函数: 所有可导区间的导数组成了一个新的函数,我们将它称为f(x)f(x)f(x)的导函数,记为f′(x)f'(x)f′(x ...

  2. [学习笔记]多项式与有标号简单图计数

    学了一天的有标号无向图计数真的自闭了- 本篇文章是基于2019WC汪乐平大佬的讲课课件<生成函数,多项式算法与图的计数>编写的. 注意:文中所有生成函数都规定为指数型生成函数(EGF),请 ...

  3. OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并

    OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...

  4. java swarm_java for swarm 学习笔记4

    学习笔记3没有体现面向对象.学习笔记4的功能和3是一样的,只不过用面向对象的方法来实现,就是先申明一个SimpleBug类,类有数据成员,成员函数,构造函数. 然后在StartSimpleBug中调用 ...

  5. OpenCV之Python学习笔记

    RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...

  6. 深度学习笔记其三:多层感知机和PYTORCH

    深度学习笔记其三:多层感知机和PYTORCH 1. 多层感知机 1.1 隐藏层 1.1.1 线性模型可能会出错 1.1.2 在网络中加入隐藏层 1.1.3 从线性到非线性 1.1.4 通用近似定理 1 ...

  7. AutoLeaders控制组—51单片机学习笔记

    文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...

  8. Java基础篇 学习笔记

    List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...

  9. 【ABAP学习笔记】

    ABAP学习笔记 记录实习培训的学习记录 文章目录 ABAP学习笔记 前言 一.ABAP是什么? 二.使用步骤 1.先建立链接: 2.输入应用服务器 IP 地址,实例编号,系统标识等信息 正文 day ...

最新文章

  1. R语言ggplot2可视化绘制累积计数图(累加图,cumulative counts)
  2. WCF 第五章 会话级别的实例
  3. asp 判断数组等于_如何在 ASP.NET Core MVC 中处理 404 错误
  4. html带图片的进度条,原生javascript上传图片带进度条【实例分享】
  5. axure9数据统计插件_数据分析太棘手?常用8大统计软件解决难题!
  6. java 数据挖掘 开源_5个开源数据挖掘工具,收下这波干货
  7. 使用Ant打包java程序
  8. 未检测到与wia兼容的设备_如何解决应用程序找不到扫描仪:错误WIA_ERROR_OFFLINE!...
  9. NSCTF-Reverse02 超级详细且简单的办法搞定
  10. 攻城狮算保险--理财型,还是消费型?
  11. 归纳遇到的一些参考文献的格式问题
  12. 混合云存储跨云灾备方案之跨云备份
  13. 甘特图控件VARCHART XGantt,解读活动组布局的“单独行中的节点”选项!
  14. 微信公众号开发之微信测试账号申请
  15. 计算机中被选中会是什么颜色,举例详解使用photoshop cc 2017改变图片中被选中区域的颜色-网络教程与技术 -亦是美网络...
  16. An unexpected error prevented the server from fulfill your request.(HTTP500)
  17. 字符串查找函数和错误信息报告函数
  18. 明日之后营地14庄中式风房子上线,网友:都是氪金大佬
  19. 执法部门的“新助手” 扫二维码进群反映问题
  20. linux 压缩固定大小,Linux 将文件打包、压缩并分割成指定大小

热门文章

  1. MAC OSX APP 开发入门篇
  2. android so文件不混淆_Android NDK混淆
  3. 补充:字典与集合应用实例(p.113)
  4. linux pm,Kali Linux下配置PM3运行环境
  5. 【华为账号服务】【FAQ】Account Kit常见咨询合集--其它问题
  6. python指数运算符,运算符 —— Python教程
  7. 注册国内中文域名和国际中文域名那一个更好?
  8. 什么是 ChatGPT ?
  9. 倾斜实景三维中的“我的世界“
  10. 15个实用实用正则(小哥进来看看?)