生成函数简介
定义#
序列 的生成函数(又称母函数,generating function),是一种形式幂级数,其每一项的系数都可以提供关于 的信息。
形式幂是指,无论函数的自变量的取值是多少,都不影响原序列的信息。
常用的有普通生成函数和指数生成函数。
生成函数经常被用于处理组合/排列问题。
普通生成函数#
开放形式#
我们看这样一个模型:
有三堆颜色不同的球,分别为 。其中, 有 3 个, 有 4 个, 有 2 个。问从中取出 4 个球进行组合的方案数是多少?
我们定义多项式 ,系数表示 1 种方案,指数表示取几个。 同理。
那么最后的答案即为 的第 4 项上的系数。因为第 4 项的系数表示取 4 个的方案数。
可以乘起来的原因是多项式乘法的本质是乘法分配律后同阶相加。
我们称形如 为序列 的普通生成函数。
再来一个例子:
若有面值为 的钱币各 1 枚,请问一共能凑出多少种面值?
的项数即为答案。如果至少去一个就去掉常数项。
封闭形式#
我们在实际运用中,直接做形式幂级数的形式十分不方便。我们可不可以找到一个简洁的形式使其脱离多项式,尤其是项数 的时候。
我们拿 的生成函数 来举例:
或者直接使用等比数列求和公式可以得到:
当 时,。
亦或者等比数列 的生成函数 :
这里列举一些:
我们一般先将初始的几个函数转成封闭形式,乘起来后再转回开放形式得到答案。
指数生成函数#
普通生成函数可以用来解决组合问题,而指数生成函数可以用来解决排列问题。
多重集排列数#
多重集是指包含重复元素的广义集合。我们设 ,则 的全排列个数为 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现