【博客】小学生都能看懂的生成函数入门教程

您所在的位置:网站首页 组合数学生成函数讲解 【博客】小学生都能看懂的生成函数入门教程

【博客】小学生都能看懂的生成函数入门教程

2024-07-16 00:20| 来源: 网络整理| 查看: 265

前言

第一次当标题党真是有点不适应

现在网上讲生成函数的教程大多都是从开始,但是我不认为这样有助于大家理解生成函数的本质。我最开始学的时候也是在这里蒙了好久,直到看到了朱全民老师的课件,才真正的理解了生成函数的本质——处理排列组合问题的有利工具,而不是简单的的指标代换。所以这篇文章,我打算从最基本的排列组合问题写起,最后慢慢扩展到。内容会比较基础,高端玩家可以直接看鏼爷的集训队论文

生成函数 定义

维基百科上是这么定义的:

在数学中,某个序列 的母函数(又称生成函数,英语:Generating function)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。

讲的通俗一点,对于某个序列,我想找一个函数来表示它,假设是。这时候函数第i项的**系数**就表示了序列中的第i个元素。同时我们也可以看到,函数中的自变量x好像并没有什么意义,他的取值并不影响序列的表示,因此我们称这种函数为形式幂级数

用处

那么这样定义由什么好处呢?

我们仔细观察一下G(x),不难发现这是一个多项式函数,对于多项式我们知道他有加、减、乘、 ~~除,求逆,取ln,exp~~ 等运算。那么我们对G(x)进行乘法运算,也就是相当于对序列进行乘法运算,那么这样干有什么意义呢?我们不妨从一个题目入手。

普通生成函数

有三种物品,分别有3, 2, 3个,问拿出4个进行**组合**算一种)的方案数是多少

学过dp的人可能会一眼看出是背包板子题。直接设表示当前到第i个位置,已经选了j个物品的方案数。转移的时候枚举一下当前选了几个

f[0][0] = 1; for(int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3