曾经有人问过我:“斐波那契数列的生成函数长啥样?”
。。。所以这东西我还是写一发吧
它有什么用?它没啥用。。。

1.齐次线性递推数列

定义:给定常数k,a1,a2,...,ak,h0,h1,...,hk−1k,a_1,a_2,...,a_k,h_0,h_1,...,h_{k-1},构造如下数列:
hn={hna1hn−1+a2hn−2+...+akhn−kn<kn≥kh_n= \begin{cases} h_n&n
称作齐次线性递推数列。
多项式
F(x)=h0+h1x+h2x2+...F(x)=h_0+h_1x+h_2x^2+...
被称作这个数列的一般生成函数。

说到齐次线性递推数列,最经典的就是斐波那契数列。
定义不用给了吧……

斐波那契数列的生成函数是这个样子的:
F(x)=1+x+2x2+3x3+5x4+8x5+...F(x)=1+x+2x^2+3x^3+5x^4+8x^5+...

如何用一些有限项的多项式来表示这个级数?

我们构造这样一个函数:
A(x)=1−x−x2A(x)=1-x-x^2
易验证:
F(x)A(x)=1F(x)A(x)=1
即:
F(x)=11−x−x2F(x)=\frac1{1-x-x^2}

这是为什么呢?
原因很简单,对于∀n≥2\forall n\geq2,
[n](F(x)A(x))=[n]F(x)−[n−1]F(x)−[n−2]F(x)=0[n](F(x)A(x))=[n]F(x)-[n-1]F(x)-[n-2]F(x)=0
其中[n]F(x)[n]F(x)代表F(x)F(x)的nn次项系数

这个结论有一些很好玩的结果,比如代入x=0.01x=0.01,有:
10.9899=1.010203050813213455...\frac{1}{0.9899}=1.010203050813213455...
我们还可以知道,如果把斐波那契数列写成这样:
11
11{\color{white}{1}}1
112{\color{white}{11}}2
1113{\color{white}{111}}3
11115{\color{white}{1111}}5
111118{\color{white}{11111}}8
1111113{\color{white}{11111}}13
11111121{\color{white}{111111}}21

然后把每一位从上到下加起来,将会出现长度为89的循环节,因为10.89\frac{1}{0.89}是个有理数……

我们可以把这个推广到一般形式:

对于递推式
hn=a1hn−1+a2hn−2+...+akhn−kh_n=a_1h_{n-1}+a_2h_{n-2}+...+a_kh_{n-k}
的生成函数
F(x)=h0+h1x+h2x2+...F(x)=h_0+h_1x+h_2x^2+...

构造函数:
H(x)=h0+h1x+h2x2+...+hk−1xk−1H(x)=h_0+h_1x+h_2x^2+...+h_{k-1}x^{k-1}
A(x)=1−a1x−a2x2−...−akxkA(x)=1-a_1x-a_2x^2-...-a_kx^k
则:
F(x)A(x)=H(x)A(x) mod xkF(x)A(x)=H(x)A(x)\ mod\ x^k
F(x)=H(x)A(x) mod xkA(x)F(x)=\frac{H(x)A(x)\ mod\ x^k}{A(x)}

可以看出这个形式十分的优雅,不过我并不知道这个优雅的形式与数列本质有什么关联……

这东西有啥用?
给出一个kk阶线性递推方程,求第nn项,n,k≤105n,k\leq10^5
暴力O(nk)O(nk),矩乘k3logkk^3logk,全挂了……
FFT可以O(nlogn)O(nlogn)。
叫我毒瘤。

2.非齐次线性递推数列

定义:给定常数k,a1,a2,...,ak,h0,h1,...,hk−1k,a_1,a_2,...,a_k,h_0,h_1,...,h_{k-1},构造如下数列:
hn={hna1hn−1+a2hn−2+...+akhn−k+g(n)n<kn≥kh_n= \begin{cases} h_n&n
称作非齐次线性递推数列。
其中g(n)g(n)是关于nn的函数,可以是常函数

要求用一些有限项多项式来表示级数:
F(x)=h0+h1x+h2x2+...F(x)=h_0+h_1x+h_2x^2+...

和之前一样,构造多项式:
H(x)=h0+h1x+h2x2+...+hk−1xk−1H(x)=h_0+h_1x+h_2x^2+...+h_{k-1}x^{k-1}
A(x)=1−a1x−a2x2−...−akxkA(x)=1-a_1x-a_2x^2-...-a_kx^k
G(x)=g(0)+g(1)x+g(2)x2+...G(x)=g(0)+g(1)x+g(2)x^2+...
则:
F(x)A(x)=H(x)A(x) mod xk+(G(x)−G(x) mod xk)F(x)A(x)=H(x)A(x)\ mod\ x^k+(G(x)-G(x)\ mod\ x^k)
F(x)=[H(x)A(x)−G(x)] mod xk+G(x)A(x)F(x)=\frac{[H(x)A(x)-G(x)]\ mod\ x^k+G(x)}{A(x)}

所以如果G(x)G(x)能被有限项多项式表示的话就做完了。。。
若g(n)=1g(n)=1,则G(x)=1+x+x2+...=11−xG(x)=1+x+x^2+...=\frac1{1-x}
若g(n)=ng(n)=n,则G(x)=x+2x2+3x3...=x(1−x)2G(x)=x+2x^2+3x^3...=\frac x{(1-x)^2}
若g(n)=n2g(n)=n^2,则G(x)=x+4x2+9x3...=x(x+1)(1−x)3G(x)=x+4x^2+9x^3...=\frac {x(x+1)}{(1-x)^3}
以此类推,如果gg函数是个多项式的话还是可以表示出来的

3.卡特兰数列

定义:
hn={1h0hn−1+h1hn−2+...+hn−1h0n=0n≥1h_n= \begin{cases} 1&n=0\\ h_0h_{n-1}+h_1h_{n-2}+...+h_{n-1}h_0&n\geq 1 \end{cases}

求F(x)=h0+h1x+h2x2+...F(x)=h_0+h_1x+h_2x^2+...

容易发现这个递推式本身就是一个卷积,所以我们直接把这个多项式自乘一下
F2(x)=h1+h2x+h3x2+...=F(x)−1xF^2(x)=h_1+h_2x+h_3x^2+...=\frac{F(x)-1}x
解得
F(x)=1−1−4x√2xF(x)=\frac{1-\sqrt{1-4x}}{2x}
即为卡特兰数列的生成函数。

4.。。。我并不知道这数列叫啥名字,暂且称作广义卡特兰数列吧。。。
我们都知道卡特兰数列的第nn项代表nn个元素的入栈出栈序列数,即从原点走到(n,n)(n,n)不跨越y=xy=x的方案数
那么,定义广义卡特兰数列hk(n)h_k(n)表示n+kn+k个元素入栈出栈后栈中剩余kk个元素的入栈出栈序列数,即从原点走到(n+k,n)(n+k,n)不跨越y=xy=x的方案数
求生成函数:
Fk(x)=hk(0)+hk(1)x+hk(2)x2+...F_k(x)=h_k(0)+h_k(1)x+h_k(2)x^2+...

考虑栈中剩余的这kk个元素,第ii个元素放进去之后就不动了,然后经历了一些入栈弹栈,然后塞入第i+1i+1个元素
换句话说我们可以把第ii个元素看做栈底,然后进行了一堆入栈出栈操作,然后栈空了,然后塞进第i+1i+1个元素……
如果中间这些走了个过场的元素数量为ss,那么方案数是多少?
h0(s)h_0(s),即卡特兰数列第ss项
于是问题就简单了,我们把nn个元素的序列分成k+1k+1段,如果一段有ss个元素,方案数是h0(s)h_0(s),求方案数

会生成函数的看到这里已经懂了吧。

构造函数H(x)=h0(0)+h0(1)x+h0(2)x2+...=1−1−4x√2xH(x)=h_0(0)+h_0(1)x+h_0(2)x^2+...=\frac{1-\sqrt{1-4x}}{2x}
则Fk(x)=Hk+1(x)=(1−1−4x√2x)k+1F_k(x)=H^{k+1}(x)=(\frac{1-\sqrt{1-4x}}{2x})^{k+1}

一些常见数列的生成函数推导相关推荐

  1. 斐波那契数列通项公式的推导证明----举一反三

    斐波那契数列通项公式的推导证明----举一反三 1-前言 2-斐波那契 2-1-什么是斐波那契 2-2-通项公式的证明 2-3-举一反三 1-前言 2021年5月20号的那天,有对象的都忙着约会秀恩爱 ...

  2. fibonacci数列前20项_等差数列、等比数列、调和数列等几种常见数列的总结

    给大家梳理一下几种常见的数列的定义.通项公式.求和公式以及性质. 斐波那契数列 一.等差数列 如果一个数列从第二项起,每一项与前一项的差都是定值,则这个数列叫做等差数列,这个定差为公差. 1.等差数列 ...

  3. 【组合数学】指数型母函数 应用 ( 多重集排列问题 | 不同球放在不同盒子里 | 奇/偶数序列的指数生成函数推导 )

    文章目录 多重集全排列公式 指数型母函数 处理多重集排列问题 引入 指数型母函数 处理多重集排列问题 公式推导 指数型母函数 处理 有限数字串问题 指数型母函数 处理 n 位数字串问题 指数型母函数 ...

  4. Bell数的生成函数推导

    设为Bell数,即集合{1,2,3,...,n}划分的方案数,易得 令为的指数生成函数,那么有 我们改变n,k求和的顺序,得到 分母n在这里碍事,我们对求导 为了求出,我们需要利用,即 得到,所以继续 ...

  5. 2018 蓝桥杯省赛 A 组模拟赛(一)数列求值+推导

    题目: 对于一个含有 n+2个元素的数列,A0.A1.--.An+1A_{0}.A_{1}.--.A_{n+1}A0​.A1​.--.An+1​ ,满足这样的递归公式 Ai=Ai−1+Ai+12−Ci ...

  6. 任务管理软件 Things3 教程使用示例

    0. 前言 0.1 本文的目录 图0. 本文目录 0.2 阅读本文能给你带来什么 任务管理软件Things3入门 + 作者对于Things3的使用流程 = 10分钟阅读 + 10分钟实践 1. Tin ...

  7. 用生成函数法解决数列求和问题

    文章目录 写在前面 问题 求解 写在前面 组合数学的一种重要思想就是生成函数(generation function,也叫母函数),前面介绍过了第一二类Stirling数的生成函数的计算,有兴趣的朋友 ...

  8. 利用生成函数求斐波那契数列通项公式

    利用生成函数求斐波那契数列通项公式 先吐槽一下,学习这玩意儿的时候真的是深深的明白了自己的弱小,人家的一个"解得"我居然解了两个小时..qwq 前置知识 斐波那契数列: \[f_i ...

  9. 【概率论与数理统计】常见分布特征函数推导过程

    相关内容: [概率论与数理统计(研究生课程)]知识点总结1(概率论基础) [概率论与数理统计(研究生课程)]知识点总结2(一维随机变量及其分布) [概率论与数理统计(研究生课程)]知识点总结3(二维随 ...

最新文章

  1. 优雅地处理重复请求(并发请求)——附Java实现
  2. 怎样把pdf转换成word
  3. python语言属于-python属于解释语言吗
  4. c语言程序设计棋盘不对齐,经典c语言程序设计例(55页)-原创力文档
  5. Docker小白到实战之开篇概述
  6. mysql 关联查询_Mysql查询优化器,再也不会因为该什么时候建立索引发愁了
  7. python创建access表_Access创建表
  8. 如何用html制作博客页面,HTML个人博客页面
  9. 开心电视助手v3.8最新绿色版,安卓设备远程管理工具神器
  10. 5款App帮你创建时间轴
  11. TOOLFK工具-在线二维码解码工具
  12. php批量发邮件,使用phpmailer发送批量邮件
  13. centos7环境下编译bitcoin
  14. 多少个程序员能出一个架构师_每个程序员或架构师都应该知道的9 + 7件事
  15. 应用宝上线应用后一直处于审核状态问题解决
  16. Android手机解网络锁软件,GalaxSIM解锁工具 GalaxSim Unlock
  17. 哪个计算机无法做到双屏显示,如何实现笔记本电脑的双屏显示
  18. WebRTC[52] - WebRTC 带宽分配逻辑详解
  19. nuke11安装教程 nuke11破解教程
  20. k8s学习-CKA考试必过宝典

热门文章

  1. 关于Windows/system32/cmd.exe以及cmd闪退解决方案
  2. VBA-VBS脚本编辑-Visual Studio 调试-WScript
  3. java基于Vue的体育用品 篮球NBA周边商城系统ssm毕业设计项目源码
  4. 一秒7步解决校园网刷知乎显示不了图片
  5. 整蛊小病毒,自己拿来快乐
  6. 如何高效的碎片化学习
  7. AI算力碎片化:矩阵乘法的启示
  8. 接口测试神器:ApiKit
  9. TwinCAT3 安装包,吃了没文化的亏……手动捂脸
  10. js加密怎样不让别人看到