首页 > 其他分享 >生成函数

生成函数

时间:2024-04-25 19:24:55浏览次数:43  
标签:函数 dfrac sum 生成 ge text aligned displaystyle

生成函数

我们可以把生成函数看作是代数对象,其形式上的处理使得人们可以通过代数手段计算一个计数问题。

通常 我们默认级数是收敛的。(主要原因在于代数手段往往是需要保证收敛的)

本文章不涉及多项式题目(交给考拉)

普通生成函数的定义为:

\[\displaystyle\sum_{n}a_nx^n \]

常见的普通生成函数:

\[\begin{aligned} \displaystyle\sum_{i\ge 0}c^i x^{ik} &\xrightarrow{\text{OGF}} \dfrac{1}{1-cx^k} \\ \displaystyle\sum_{i\ge 0}\binom{n}{i}x^i &\xrightarrow{\text{OGF}} (1+x)^n \\ \displaystyle\sum_{i\ge 0}\binom{i+k-1}{k-1} &\xrightarrow{\text{OGF}} \dfrac{1}{(1-x)^k} \\ \displaystyle\sum_{i\ge 0}x^{2i} &\xrightarrow{\text{OGF}} \dfrac{1}{1-x^2} \\ \displaystyle\sum_{i\ge 0}\dfrac{c^i x^i}{i!} &\xrightarrow{\text{OGF}} e^{cx} \\ \displaystyle\sum_{i>0}\dfrac{x^i}{i} &\xrightarrow{\text{OGF}} \text{ln}(1-x) \\ \displaystyle\sum_{i>0}\dfrac{(-1)^{n-1}x^n}{n} &\xrightarrow{\text{OGF}}\text{ln}(1+x) \end{aligned} \]

基本运算:

\[\begin{aligned} (\displaystyle\sum_{n}f_nx^n)\pm(\displaystyle\sum_{n}g_nx^n)&=\displaystyle{\displaystyle\sum_{n}(f_n \pm g_n)x^n} \\ c\times (\displaystyle\sum_{n}f_nx^n)&=\displaystyle\sum_{n}c\times f_nx^n \\ (\displaystyle\sum_{n}f_nx^n)(\displaystyle\sum_{n}{g_nx^n})&=\displaystyle\sum_{n}(\displaystyle\sum_{i=0}^{n}f_ig_{n-i})x^n \end{aligned} \]

小应用:求一个排列关于逆序对个数的生成函数:

\[\displaystyle\prod_{i=1}^{n}(\sum_{j=0}^{j-1}x_j)=\displaystyle\prod_{i=1}^{n}\dfrac{1-x^i}{1-x} \]

大概的意思就是刻画每个位置作为逆序对的后者出现了多少次。刚好每种不同的数量都对应着一个排列。

简单小练习:P2000 拯救世界(式子大多上面都写了,可以参考)

P6078 CEOI2004] Sweets

终于有例题了!

首先可以很好的列出生成函数:

\[\displaystyle\sum_{i=1}^{n}\sum_{j=0}^{m_i}x_j=\sum_{i=1}^{n}\dfrac{1-x^{m_i+1}}{1-x}=(1-x)^{-n}\sum_{i=1}^{n}1-x^{m_i+1} \]

考虑 \((1-x)^{-n}\) 拆开得到:

\[(\prod_{i=1}^{n}1-x^{m_i+1})\sum_{j\ge 0}\binom{n+j-1}{j}x^j \]

\(n\) 非常小,那么先用 \(2^n\) 枚举前面括号内的所有可能,最终得到一个多项式 \(p\),至多有 \(2^ n\) 项。

差分,设 \(f(v)\) 表示糖果数小于等于 \(v\) 的所有方案的和,答案为 \(f(b)-f(a-1)\)。

考虑对于 \(p\) 的某一项 \(k\),对 \(f(v)\) 的贡献即为:

\[p_k\sum_{i=0}^{v-k}\binom{n-1+i}{n-1}=p_k\binom{n+v-k}{n} \]

相当于统计最后指数相加不超过 \(m\),后一步是上指标求和。

注意到这题模数不友好,考虑把组合数写成下降幂形式,具体而言:

\[\binom{n}{m}=\dfrac{n^{\underline m}}{m!} \]

还是不方便,注意到组合数的下指标很小很小,考虑可以求出下降幂对模数乘以 \(m!\) 取模,再除去 \(m!\) 后在对模数取模。

当然你也可以使用扩展卢卡斯,砍瓜切菜。

指数生成函数的定义为:

\[\sum_{i\ge 0}\frac{a_ix^i}{i!} \]

常见的指数生成函数:

\[\begin{aligned} \sum_{i\ge0}\dfrac{c^ix^i}{i!}&\xrightarrow{\text{EGF}}e^{cx} \\ \sum_{i\ge0}\dfrac{x^{2i}}{(2i)!}&\xrightarrow{\text{EGF}}\dfrac{e^x+e^{-x}}{2} \\ \sum_{i\ge0}\dfrac{x^{2i+1}}{(2i)!}&\xrightarrow{\text{EGF}}\dfrac{e^x-e^{-x}}{2} \end{aligned} \]

证明?泰勒展开(待学习)。

例题:用红白蓝三色给 \(1\times n\) 棋盘染色,要求红格颜色的个数是偶数,且至少有一个蓝色的方案数。

\[\begin{aligned} g(x)&=\sum_{i\ge 0}\dfrac{x^{2i}}{(2i)!}\sum_{i\ge 0}\dfrac{x^i}{i!}\sum_{i\ge 1}\dfrac{x^i}{i!} \\ &=\dfrac{e^x+e^{-x}}{2}e^x(e^x-1) \\ &=\dfrac{e^{3x}-e^{2x}+e^x-1}{2} \\ &=\dfrac{-1}{2}+\sum_{i\ge 0}\dfrac{3^n-2^n+1}{2}\dfrac{x^n}{n!} \end{aligned} \]

那么可以得到:(式子外有常数项,要小心!)

\[h_n=\begin{cases} 0 & n=0 \\ \dfrac{3^n-2^n+1}{2} & n>0 \end{cases} \]

P2012 拯救世界2

这题跟 P2000 的本质区别在于这题方案是有序(相同的东西不做区分),因此考虑 \(\text{EGF}\)。

找到三种类型的基因分别对应的 \(\text{EGF}\)。

\[\begin{aligned} f(x)&=e^x\\ g(x)&=\dfrac{e^x+e^{-x}}{2}\\ h(x)&=\dfrac{e^x-e^{-x}}{2} \end{aligned} \]

那么答案为

\[\begin{aligned} ans&=[x^n](f(x)g(x)h(x))^4\\ &=[x^n](\dfrac{1}{4}e^x(e^{2x}-e^{-2x}))^4\\ &=[x^n](\dfrac{1}{4}(e^{3x}-e^{-x}))^4\\ &=[x^n]\dfrac{1}{256}(e^{12x}-4e^{8x}+6e^{4x}-4+e^{-4x}) \end{aligned} \]

那么又根据:

\[\sum_{i\ge0}\dfrac{c^ix^i}{i!}\xrightarrow{\text{EGF}}e^{cx} \]

\[ans=\dfrac{n!}{256}(\dfrac{12^n}{n!}-\dfrac{4\times 8^n}{n!}+\dfrac{6\times 4^n}{n!}+\dfrac{(-4)^n}{n!}) \]

因为是 \(\text{EGF}\),所以一定要记得乘以 \(n!\)

\[ans=\dfrac{1}{256}(12^n-4\times 8^n+6\times 4^n+(-4)^n) \]

注意到这个模数又很不友好,考虑将 \(n\) 很小的时候暴力乘,大的时候约分一手。

\[ans=81\times 12^{n-4}-8^{n-2}+6\times 4^{n-4}+(-4)^{n-4} \]

然后你写了个快速幂,高高兴兴的交上去,发现 TLE 了!

出题人很没素质地卡了常。

需要使用扩展欧拉定理将指数减到模数级别,还可以再配合光速幂可以更快。

看到这里你就成功入门生成函数了!

标签:函数,dfrac,sum,生成,ge,text,aligned,displaystyle
From: https://www.cnblogs.com/Hanghang007/p/18158383

相关文章

  • 16.匿名函数 与 部分内置函数
    【一】匿名函数1)语法lambda函数参数:表达式2)用法#单参数匿名函数lbd_sqr=lambdax:x**2#多参数匿名函数sumary_lba=lambdaarg1,arg2:arg1+arg2#多参数解包add_lba=lambda*args:sum(args)3)高阶函数#过滤函数(filter)odd=lambdax:x%2==1......
  • vscode 配置c/c++环境,无法生成 *.exe文件
    ​【问题】:    使用vscode配置c/c++环境时,提示无法构建失败。 【解决方案】:    1.当前结合网上找的资料已经检查过,tasks.json和launch.json文件,并无配置错误。    2.F5调试时,终端输出错误调试信息如下:启动调试任务时,执行了2条命令。1)cmd/c......
  • Web Component addEventListener .bind(this)的函数带参数引起的报错
     一开始这样写:  this.shadowRoot.querySelector('.prev').addEventListener('click',this.moveSlide(1).bind(this));报错:UncaughtTypeError:Cannotreadpropertiesofundefined(reading'bind')    以为是前面的DOM获取不对,但是怎么改都不对,网上查询后......
  • 欧拉函数
    定义:欧拉函数(记为\(\phi(n)\)),表示的是一个数\(n\)与小于等于它的数中有多少个满足\(\gcd(n,x)=1\),即为互质。计算公式:\(\phi(n)=n\cdot\prod_{i=1}^{cntn}(1-p_i)\)(其中\(p_i\)是\(n\)的质因子).性质:性质一:欧拉函数是积性函数,即对于满足\(\gcd(a,b......
  • 视频生成SORA随想
    读了有关OpenAI发布'SORA'的文章,对这一创新模型所展示的人工智能进步感到非常印象深刻。从文本提示生成复杂的视频序列具有真实感和深度,令人惊叹。看到人工智能技术的发展不仅能理解复杂的提示,还能将其转化为视觉上令人愉悦的叙述,真的非常迷人。回顾摄影的历史,大约100年前,由于设......
  • 构建插件函数
    1defget_response_from_plugins(name_space_p,post_type_p,user_state_p,data):2#存储每个函数的结果3try:4message=str(data["message"])5except:6message=""78plugin_dir='plugins'......
  • OpenAI未至,Open-Sora再度升级!已支持生成16秒720p视频
    Open-Sora在开源社区悄悄更新了!现在支持长达16秒的视频生成,分辨率最高可达720p,并且可以处理任何宽高比的文本到图像、文本到视频、图像到视频、视频到视频和无限长视频的生成需求。我们来试试效果。生成个横屏圣诞雪景,发b站再生成个竖屏,发抖音还能生成16秒的长视频,这下人......
  • 助力数智化转型:使用检索增强生成【RAG】构建物业行业大模型
    ​本文作者:蔡冠杰,碧桂园服务后端开发高级工程师,拥有8年开发经验。1 (RAG)检索增强生成技术介绍1.1检索增强生成是什么?举个例子,比如我作为员工,直接问大模型:提问:我们公司几点下班?大模型在没有“接触”过我们公司《员工手册》等企业私有数据的情况下,大模型往往难以给出正确......
  • 使用 NestJS 和 qrcode.js 创建 QR 码生成器 API
    前言QR码(QuickResponseCode)是一种二维码,于1994年开发。它能快速存储和识别数据,包含黑白方块图案,常用于扫描获取信息。QR码具有高容错性和快速读取的优点,广泛应用于广告、支付、物流等领域。通过扫描QR码,用户可以快速获取信息和实现便捷操作,为现代生活带来便利。在本教程中,小编......
  • 输入‘(’和‘)’判断字符串有效的函数算法
    ``//设置一个函数,通过输入键盘中的‘(’和‘)’判断字符串是否有效//顺序表中的元素数据类型是char类型typedefcharDataType_t;//创建顺序栈SequenceStack各项数据(栈底地址栈容量栈顶元素下标)的结构体typedefstructSequenceStack{DataType_t*Bottom;//记录栈......