[学习笔记]生成函数
解决数列问题
其实还是一个非常好用的东西
利用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 定义 导数: 导函数: 所有可导区间的导数组成了一个新的函数,我们将它称为f(x)f(x)f(x)的导函数,记为f′(x)f'(x)f′(x ...
- [学习笔记]多项式与有标号简单图计数
学了一天的有标号无向图计数真的自闭了- 本篇文章是基于2019WC汪乐平大佬的讲课课件<生成函数,多项式算法与图的计数>编写的. 注意:文中所有生成函数都规定为指数型生成函数(EGF),请 ...
- OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并
OpenCV之Python学习笔记 一直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看到一本国外的新书< ...
- java swarm_java for swarm 学习笔记4
学习笔记3没有体现面向对象.学习笔记4的功能和3是一样的,只不过用面向对象的方法来实现,就是先申明一个SimpleBug类,类有数据成员,成员函数,构造函数. 然后在StartSimpleBug中调用 ...
- OpenCV之Python学习笔记
RSS订阅 登陆 注册 原文链接地址:http://www.itozi.net/19477.html OpenCV之Python学习笔记 ITOZI 发布于 2015-08-06 分类:OpenSta ...
- 深度学习笔记其三:多层感知机和PYTORCH
深度学习笔记其三:多层感知机和PYTORCH 1. 多层感知机 1.1 隐藏层 1.1.1 线性模型可能会出错 1.1.2 在网络中加入隐藏层 1.1.3 从线性到非线性 1.1.4 通用近似定理 1 ...
- AutoLeaders控制组—51单片机学习笔记
文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...
- Java基础篇 学习笔记
List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...
- 【ABAP学习笔记】
ABAP学习笔记 记录实习培训的学习记录 文章目录 ABAP学习笔记 前言 一.ABAP是什么? 二.使用步骤 1.先建立链接: 2.输入应用服务器 IP 地址,实例编号,系统标识等信息 正文 day ...
最新文章
- R语言ggplot2可视化绘制累积计数图(累加图,cumulative counts)
- WCF 第五章 会话级别的实例
- asp 判断数组等于_如何在 ASP.NET Core MVC 中处理 404 错误
- html带图片的进度条,原生javascript上传图片带进度条【实例分享】
- axure9数据统计插件_数据分析太棘手?常用8大统计软件解决难题!
- java 数据挖掘 开源_5个开源数据挖掘工具,收下这波干货
- 使用Ant打包java程序
- 未检测到与wia兼容的设备_如何解决应用程序找不到扫描仪:错误WIA_ERROR_OFFLINE!...
- NSCTF-Reverse02 超级详细且简单的办法搞定
- 攻城狮算保险--理财型,还是消费型?
- 归纳遇到的一些参考文献的格式问题
- 混合云存储跨云灾备方案之跨云备份
- 甘特图控件VARCHART XGantt,解读活动组布局的“单独行中的节点”选项!
- 微信公众号开发之微信测试账号申请
- 计算机中被选中会是什么颜色,举例详解使用photoshop cc 2017改变图片中被选中区域的颜色-网络教程与技术
-亦是美网络...
- An unexpected error prevented the server from fulfill your request.(HTTP500)
- 字符串查找函数和错误信息报告函数
- 明日之后营地14庄中式风房子上线,网友:都是氪金大佬
- 执法部门的“新助手” 扫二维码进群反映问题
- linux 压缩固定大小,Linux 将文件打包、压缩并分割成指定大小
热门文章
- MAC OSX APP 开发入门篇
- android so文件不混淆_Android NDK混淆
- 补充:字典与集合应用实例(p.113)
- linux pm,Kali Linux下配置PM3运行环境
- 【华为账号服务】【FAQ】Account Kit常见咨询合集--其它问题
- python指数运算符,运算符 —— Python教程
- 注册国内中文域名和国际中文域名那一个更好?
- 什么是 ChatGPT ?
- 倾斜实景三维中的“我的世界“
- 15个实用实用正则(小哥进来看看?)