趣谈生成函数 =v=

趣谈生成函数 =v=

今天luyouqi在洛谷随机跳题rand出来一道生成函数板子题,然后我给做了(雾

发现小伙伴们还不会生成函数,于是我试着写这篇生成函数简介。(其实我也不怎么会生成函数这么高级的东西,本篇纯属道听途说,大家看着当故事娱乐一下就好)

食用指南

  • 笔和草算纸是推荐的食用工具

从前有一个无限长的随便一个数列a={2,1,4,7,4},有一天,一个大佬说:能不能用一个函数表示这个数列呢?于是大佬把a的每一项当做一个多项式的系数,得到了多项式函数f(x)=2+x+4x2+7x3+4x4,用来表示上面那个序列。大佬很开心。

大佬的朋友——蒟蒻感到疑惑:这个函数代入一个x,得到的东西有什么意义啊?

大佬思考了一会,说:也没什么意义。

蒟蒻说:那你研究它有个*儿用?

大佬又思考了一会,找到了它的一种用途。假如数列a代表一类物品,中ai表示这类物品中选i件物品的方案数——例如a={1,1,1}表示A类物品中可以选0件或1件或2件,但不能选大于2件;又例如无限长数列b={1,0,0,1,0,0,1,0,0,1...}表示B类物品只能选3的倍数件。这时候,把f(x)=1+x+x2g(x)=1+x3+x6+x9...乘起来,得到另一个函数h(x)=1+x+x2+x3+x4+...。这个函数有什么意义呢?它的第i项的系数就是选A、B两种物品共i件的方案数。

蒟蒻说:这有啥,不就是把两个多项式乘起来么?和O(n2)一个个枚举有什么区别?

大佬说:嗯……你可以FFT……

蒟蒻:哦。没有这个函数我也知道可以FFT。

大佬不认为这个“用函数表示数列”的东西很没用,他决定继续研究,还给它取了个名字叫做数列的“生成函数”,表示用这个函数能生成(表示)一个数列。

有一天,大佬告诉蒟蒻他发现了一个规律——a={1,1,1,1,1...}的生成函数是f(x)=11x

蒟蒻说:老哥,您不会是研究数学研究傻了吧?它的生成函数不是1+x+x2+x3...嘛?怎么会等于您这个11x呢?

大佬说:对啊!1+x+x2+x3...就等于11x

蒟蒻:喂,大连市第七人民医院嘛?

大佬:……在x(1,1)的时候。

蒟蒻:你不早说!等等,为什么x(1,1)时就相等了?

大佬:等比数列求和公式啊,1+x+x2+x3...的前n项和等于1xn1x,这是个无限长的数列,n趋近于无穷的时候xn趋近于0,这不就相等了嘛!

蒟蒻:啊,对啊!可是好好的一个函数,你凭空给限定了定义域,这还是原来那个函数嘛?

大佬:不是你说的生成函数中的x没有意义嘛!还有,你看1+x2+x4+x6...这个函数,它是不是等于11x2

蒟蒻:对,把前一个式子中的x换成x2不就好了嘛!可是1+2x+3x2+4x3...这个函数,它等于什么?

大佬:等于1(1x)2啊!你看,对等式11x=1+x+x2+x3...两边分别求导,得到……算了,说了你也不懂,那你把两个1+x+x2+x3...乘起来不就好了嘛!

蒟蒻:蛤?我看看……的确诶!

大佬:我还知道1+3x+6x2+10x3+15x4...的生成函数是多少呢!是1(1x)3!推广开来,1(1x)k生成的数列是iCi+k1k1xi

蒟蒻:为什么啊?

大佬:你看1(1x)k就是k11x相乘,就是k1+x+x2+x3...相乘嘛。那么它的第i项系数就是从k1+x+x2+x3...中每个选出一项,乘起来恰为xi的方案数,就是i=x1+x2+...+xk的非负整数解的组数,你用组合数学中的所谓“隔板法”求一下,是不是Ci+k1k1

蒟蒻:有道理!

大佬:了解了11xk1(1x)k这两种特殊生成函数,就掌握了一类题的技巧——来做道题吧!Luogu P2000 欢迎你!


大佬:我还会用生成函数求斐波那契数列通项!

蒟蒻:这么牛逼?

大佬:首先啊,你看这个斐波那契数列的生成函数f(x)=x+x2+2x3+3x4+5x5+8x6...,然后把它乘个x,得xf(x)=x2+x3+2x4+3x5+5x6+8x7...,用前式减去后式,得到f(x)xf(x)=x+x3+x4+2x5+3x6+5x7...=x+x2f(x),所以f(x)=x1xx2

蒟蒻:可是这不是我们之前见过的那两种特殊生成函数,你怎么把它还原成数列呢?

大佬:我打算把它变成等比数列求和的形式!这个分母1xx2是可以因式分解的,分解后就是(1152x)(11+52x),所以x1xx2=x(1152x)(11+52x),看着非常难受,裂项一下,得到x(1152x)(11+52x)=151(1152x)+151(11+52x)这就成了两个等比数列求和公式乘个常数再相加的形式了!把两个等比数列还原成数列,得到fibn=15(152)n+15(1+52)n这就是斐波那契数列通项公式了!

蒟蒻:哇!这么神奇!

大佬:据说这种方法可以应用到各种线性齐次递推中哦~

posted @   胡小兔  阅读(11689)  评论(16编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示