生成函数:把计数写进代数
假设我们要付 2 单位,手边有面值 1 和面值 2 的硬币。可以付两枚 1,也可以付一枚 2。我们关心的是每种硬币各付几枚:付款时递出的顺序不另算一种。这样小的金额,可以把所有办法直接列出来。可是,如果金额改变,或再加入一种面值,我们怎样把已有的选择接起来,而不必每次从头重列?
我们把实际的付款办法记录下来,就能做出一张“总金额—办法数”的表。怎样让普通的加法和乘法帮助我们整理这张表?为了解决这个问题,我们会建立一种叫作生成函数的记录。现在不需要记住名字;下面这个小例子会把每份选择摆出来,无穷级数要等到第 05 节把无限多项加起来时才用得上。
先说清楚:什么算一种方法?
题目的规则是:面值 1 的硬币最多用两枚,面值 2 的最多用一枚,也可以一种都不用。同面值的硬币没有编号,我们不区分究竟用了哪一枚。还有一条独立的规则:付款记录只写每种用了几枚,不写递出的顺序。因此,按“1、2”和按“2、1”的次序递出硬币,都留下“一枚 1、一枚 2”这同一份记录。下面可以换一种记录规则,检查区别究竟来自哪里。
这份记录保留什么?
下面两份都付出 3 单位。从左往右读,就是递出的先后次序。把两份都登记,再换一个问题重新登记。
付款问题只保留 1 和 2 各用了几枚。有意不记的是递出过程。
递出顺序:1、2
递出顺序:2、1
把 1 单位硬币的数量暂时记为 ,把 2 单位硬币的数量记为 。字母只是数量的名字: 可以是 0、1、2, 可以是 0、1。每枚第二种硬币贡献 2,所以总量是 。例如 、 时,总量是 。
对每个 ,都有 和 两种选择。因此我们一共有 对数量:(0,0)、(0,1)、(1,0)、(1,1)、(2,0)、(2,1)。第一项数量相同的对由 分组,每组刚好有两个不同的 ,所以既没有漏掉,也没有重复。对应的总量分别是 0、2、1、3、2、4。
于是总量 0、1、2、3、4 对应的方法数是 1、1、2、1、1。这里总量 0 的方法数是 1,因为两种硬币都不取,确实是一种确定的选择;它和“根本没有合法选择”不同。接下来我们想把这张“总量对应方法数”的表保存下来,并且让记录本身帮助我们计算。
用完整清单建立简短记录
| 记录 | 1 的枚数 | 2 的枚数 | 金额 |
|---|---|---|---|
| 1 | 0 | 0 | |
| 2 | 0 | 1 | |
| 3 | 1 | 0 | |
| 4 | 1 | 1 | |
| 5 | 2 | 0 | |
| 6 | 2 | 1 |
| 金额 | 办法数 | 原记录编号 |
|---|---|---|
| 0 | 1 | 1 |
| 1 | 1 | 3 |
| 2 | 2 | 2、5 |
| 3 | 1 | 4 |
| 4 | 1 | 6 |
怎样让记录也能帮我们计算?
先看普通表格。表里需要两件不同的信息:付出的金额是多少,以及能付出这个金额的办法有几种。例如“金额是 2”和“办法有 2 种”虽然都出现了数字 2,却不能混为一谈。用两列能把它们分开,但我们还想让记录帮助我们合并选择:一份选择付 2,另一份付 3,合起来应当记录 5。我们需要一种相乘时会把这两个金额相加的写法。
我们用字母 作一个记号。两个 相乘,简写成 ;三个相乘,写成 。右上角的数字叫指数,它告诉我们乘了几个 。于是 :两组中的 2 个和 3 个合起来正好是 5 个。这正是我们需要的规则,所以选择用指数记录金额。 在这里不代表某枚硬币,也不需要代入金额;金额已经写在指数的位置。
金额为 0 时,我们没有要接在一起的 ,把这份记录写成 。为什么用 1?因为一份付款加上“什么也不付”,金额应当保持原样;乘以 1 也恰好不改变另一项。这个约定让零金额也遵守同一套合并规则。
每一种选择贡献一项。两种不同的选择都给出总量 2,就得到 。前面的 2 叫作系数,它数的是方法;上面的 2 是指数,它记的是总量。若没有方法凑出总量 5,对应项就是 ,通常不写出来。因此前面的表可以写成:
跟着一个选择,找到它对应的项
先选择数量。蓝色的 1 单位硬币每枚贡献 1,金色的 2 单位硬币每枚贡献 2。保留这个选择,再逐步展开它的记录。
比较“两枚 1”和“一枚 2”。金额都为 2,数量记录却不同。它们各贡献一个 x²,因此合起来时系数才会是 2。
例如读 这一项,就是“总量 2,有 2 种方法”。读常数项 1,就是“总量 0,有 1 种方法”。这里不是用整个式子的数值回答某一个总量的问题,而是找到对应指数,再读取它前面的系数。
为什么有时相加,有时相乘?
先看加法。回到开头的两幅硬币图:取两枚 1,或者取一枚 2。这是两个互不重叠的选择,因为前者没有 2 单位硬币,后者有一枚。它们各贡献一个 ,合起来是 ,表示总量 2 有两种方法。这里相加的前提是两组方法互不重叠。如果同一个选择同时出现在两个清单里,直接相加就会重复计算它。
现在回到硬币。我们不是在两种硬币之间二选一,而是要为每一种硬币都作一次选择。1 单位硬币可以取 0、1、2 枚,记录为 ;2 单位硬币可以取 0、1 枚,记录为 。我们需要从 中选一项,同时从 中选一项。相乘的每个式子叫作一个因子,所以这里 和 就是两个因子。
合并两份选择时,总量应该相加。乘法恰好能够做到这一点:,两个指数对应的份数 2 和 3 合成了 5。一般地,把 个 和 个 接在一起,共有 个 ,所以 。若某个指数是 0,相应因子是 1,不改变另一个总量,这也符合“什么都不取”的意思。
为什么乘两个括号会列出全部选择?按分配律, 的每一项都要乘整个 ,也就是分别乘 的两项并相加。这样, 中的每个选择都会与 中的每个选择配对一次。把中间的每一项写出来,就能逐一核对:
下面把这六次配对放进表格。选定目标总量后,点“计入下一对”。每个符合目标的格子被计入时,就把它贡献的 1 留在计数中;没有被计入的格子不会悄悄消失。蓝色硬币标 1,金色硬币标 2,数值也始终写在硬币上。
| 1 单位 ↓ / 2 单位 → | 0 枚 2 单位圆片 | 1 枚 2 单位圆片 |
|---|---|---|
| 0 枚 1 单位圆片 | 总量不同 | 符合目标;尚未计入 |
| 1 枚 1 单位圆片 | 总量不同 | 总量不同 |
| 2 枚 1 单位圆片 | 符合目标;尚未计入 | 总量不同 |
还没有计入任何一对。点“计入下一对”,已经计入的格子会保留下来。这里不会自动推进。
以目标 2 为例,第一对是 的常数项与 的 ,相乘得到 ,表示取 0 枚 1 和 1 枚 2;另一对是 的 与 的常数项,也得到 ,表示取 2 枚 1 和 0 枚 2。因此系数是 。两种方法恰好回到了开头的两幅图。
从一张小表得到一般的规则
以后把总量 的方法数记为 。下标 表示我们正在看哪个总量,所以 是总量 0 的方法数, 是总量 1 的方法数,不是 乘 0 或 乘 1。把这些数按指数排在一起的式子,称为这个数列的普通生成函数。本页说“生成函数”时都指这种记录法。
是这一整份记录的名字。为什么还叫“函数”?有限记录本来就是一个多项式;适当条件下,无穷记录也可以对应数值函数。不过本页使用的是它的“按系数记录”的意义,后面会严格说明无穷记录怎么运算,不需要先画出一条曲线,也不需要证明数值级数收敛。
前面的两个单独因子中,每个允许的金额只对应一种选择。例如,只考虑 1 单位硬币,金额 2 只有“取两枚”这一种。现在允许第一份记录 中有 种选择给出金额 ,第二份记录 中有 种选择给出金额 。这里下标是在指出金额,前面的数是在数办法。对第一份记录中的每一种选择,都能配上第二份记录的全部 种选择。这样共有 组,每组 对,所以是 对;每对的金额都是 。
要找总量 ,只能选择 的配对。因为总量不为负, 只能从 0 走到 ;一旦 确定, 就只能是 。所以依次检查 (0,n)、、一直到 (n,0),把各自的方法数相加,就得到乘积中 的系数。
左边的 意思是“取后面式子里 的系数”,不是乘以 。右边的 是把刚才那串加法缩写:让 依次等于 0、1、……、,每次算一项 ,然后全部相加。这条系数相乘、按总指数相加的规则,也叫卷积。我们先把它的意思算清楚,名字本身不增加新的操作。
这里的严格性来自两个方向。任何合法的配对都有一个确定的 和 ,因此一定出现在上面的某一项里,不会漏掉。反过来,每一项只组合总量恰为 和 的两个选择,所以不会混入总量错误的配对。不同的 不可能描述同一对,因为同一份 选择的总量是确定的,所以也不会跨项重复。
不过还要核对:一个最终对象是否恰好对应一对选择?在硬币问题中,从最后取出的硬币可以唯一读回两种数量,所以配对与最终对象一一对应。若两个因子记录了同一个动作,或某些配对被题目禁止,就不能未经调整直接相乘。代数只会忠实执行我们写入的规则,不会替我们修正计数对象。
硬币可以无限取,为什么还算得清?
现在让 1 单位硬币的供给没有上限。我们可以取 0、1、2、3、……枚,每个数量只有一种选择,于是记录变成 。三个点表示按同样的规则继续,每一个非负整数指数的系数都是 1,不是只写了几个样本就猜后面的规律。
这样按非负整数指数排列、允许有无限多项的记录,叫形式幂级数。“形式”提醒我们:先按系数来理解,不把 当成某个实际数值去求无限和。两个这样的式子相等,是说每一个指数对应的系数都相等。相加时逐个系数相加;相乘时使用上一节已经说明的配对规则。
这样的乘法会不会要求一次相加无限多个数?对于固定的 ,不会。因为 和 都不为负, 只有 (0,n) 到 (n,0) 这 种指数配对。更高次的项不可能降低总指数来帮助凑 。这就是我们能在有限的表格里准确计算一个指定系数的原因。
我们想给 找一个更短的写法。注意乘一个 会把每项指数增加 1,因此 。把这两份记录相减,常数项是 ;每个正整数指数上的系数都是 。所以:
这不是把一个模糊的“最后一项”消掉,而是对每一个确定的系数做了有限次减法。我们现在允许负系数参加中间代数运算,例如 中 的系数是 ;这个中间式子并不是在数“负一种选择”。最终的计数记录仍然有非负整数系数。
一个式子与 相乘得到 1,我们就把它称为 的乘法逆,写作 。在这里,这个分式表示形式幂级数的乘法逆。我们刚才证明了 就是这样的式子。
推导:为什么 只指向一份记录
可能会有另一份记录也乘 得到 1 吗?不会。如果 的系数依次为 、、……,由 得到 ; 的系数给出 ,所以 。这意味着每个系数都等于前一个:,,如此逐项确定全部系数,它们正是 的系数。
每一列代表一个指数,格子中是系数,不是 的数值。保留 这一行,把它的副本右移一列,就得到 。上下对应的格子相减,便给出 的系数。每一行还会继续到可见窗口以外。
| 记录 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ⋯ |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | ⋯ |
上面的证明适用于每一个指数,不只是画面上的八个
如果每枚硬币的值是一个正整数 ,取 0、1、2、……枚就贡献 1、、、……。乘 会把每个允许指数挪到下一个允许指数,再相减只留下常数项 1;其他不为 的倍数的指数始终是 。因此同样得到:
推导:为什么 也只指向一份记录
这个逆也只有一个。假设另一份记录 满足 ,系数为 、、……。常数项先给出 。指数 满足 时, 还不能贡献这一项,所以 。对 ,逐项比较得到 ,也就是 。不断把指数减去 ,最后会落到 0、1、……、 中的一个,因此每个系数都被唯一确定: 的倍数处为 1,其余处为 0。当 时,中间的 没有任何整数,直接回到上一种情况。
这里 必须为正。若允许无限多枚值为 0 的硬币,并把不同数量视为不同选择,那么仅总量 0 就有无限种方法,不能再用一个有限整数系数记录。这也说明我们的条件不是无关紧要的附注。至于把 代成 1 后的数值问题,本页没有这样做;形式恒等式不声称 是一个有限数。
例一:用 1、2、5 单位硬币凑总额
现在把硬币换成三种硬币,面值分别为 1、2、5,每种都可以取任意非负整数枚。同面值硬币不作区别,排列顺序也不算新方法。我们想凑出 5。前一节的规则分别给出三份记录,然后用乘法把三个数量选择合起来:
三个无穷记录能不能像普通括号那样相乘、改换分组和顺序?可以。对任何一个目标指数 ,只有 0 到 之间的指数能参与,所以每个系数都只来自有限个普通整数乘积。下面抵消三个分母时,用到的正是这一点。理由放在下面的选读中。
推导:为什么可以改换分组和乘法顺序
三个无穷记录能不能像有限多项式那样改换括号和乘法顺序?固定目标指数 ,三项的指数 、、 必须满足 ,而且都不为负,因此每个都只能是 0 到 之间的整数。可供考虑的三元组只有有限多个。括号圈住前两个因子时,我们按 分组,并配上 ;括号圈住后两个因子时,我们按 分组,并配上 。两种写法都让每个总指数为 的三元组出现恰好一次,而且贡献相同的三个系数之积。交换因子也只是交换三元组里相应的位置,不改变总指数或这个积。所以每个系数都相同,两份记录就相同。
这个理由也适用于任意有限个因子:固定 后,每个指数仍在 0 到 之间,组合数仍然有限。即使中间系数为负,我们也只是在有限个整数之间做普通加法和乘法,因此同样可以改换分组和顺序。下面抵消三个分母时,用到的正是这一点。
最后一个分式是前面三个乘法逆的合写:把 乘以三个分母,每个分母恰好抵消它对应的级数因子,得到 1。这个写法缩短记录,但还没有自动给出目标的数值答案,我们仍要取 的系数。
推导:为什么这个分式只指向我们构造的
这个合写的逆也不会有两个不同答案。把三个分母的乘积临时记作 ,刚才证明了 。如果另一份记录 也满足 ,使用已经说明的有限系数分组规则,就有 。因此这个分式确实唯一地指向我们构造的 。
若分别取 、、 枚硬币,这三个因子中选出的项是 、、,乘积为 。因此只需列出满足 的非负整数数量。先固定 :它只能是 0 或 1,因为 时,仅 5 单位硬币就已达到 10,超过 5。
时,。 只能是 0、1、2,分别使 、、,所以得到 (5,0,0)、(3,1,0)、(1,2,0)。
时,。 和 都不为负,因此只能 、,得到 (0,0,1)。以上是 种方法,所以 。
下面构造清单时,5 的枚数保持不变,2 的枚数逐个增加,不足的金额用 1 补齐;这一组列完,5 的枚数就增加一枚。蓝色标 1、金色标 2、粉色标 5。点“加上下一个选择”后,硬币和等式一起保留下来。改动目标会清空旧清单,避免把不同题目的计数混在一起。
现在还没开始列举。显示区暂时为空,不代表答案是零。
这个列举为什么完整?对目标 ,每个合法方案都有唯一的 。固定它之后,每个合法方案也有唯一的 ,而 只能等于 。程序和手算都只让 、,再算这个非负的 。因此每个生成的三元组合法,每个合法的三元组也必定会被生成一次。它不是靠观察几行图案来证明的。
作为相邻的检查,把目标改成 6。 时,、1、2、3,对应 、4、2、0,共 4 种; 时,剩下 1,只能 、,又有 1 种。合计 。这和目标 5 的四种选择不同,清单能把新增或消失的对象直接展示出来。
这也和不定方程相连:我们在数方程 的非负整数解。生成函数把不同 的答案放在同一份记录中;它没有把“整数且非负”的限制抹去,而是通过每个因子里允许出现的指数来保存这些限制。
例二:最多取几枚,或者至少取几枚?
无限供给不能代替有限供给。若值为 的硬币最多取 枚, 是正整数、 是非负整数,允许的数量只有 0 到 ,因此记录应当在 停下来:
像前面一样乘 ,得到 。做 时,指数 到 的系数都是 ,常数项留下 1,最高的 只出现在被减掉的式子里,留下 。于是每一步为:
最后一步是两边乘前面已经构造的形式逆 ,并不是在任意数值 处随意除以一个可能为零的数。当 时,中间没有需要相消的项,,式子同样给出 。
例如只有两枚 2 单位硬币,允许 0、1、2 枚,记录就是 。代入 、,上式给出 ,其中指数 6 来自 。若还允许任意枚 1 单位硬币,想凑出 5,就分别取 0、1、2 枚 2,剩下的 1 的枚数是 5、3、1,所以有 3 种。
若至少要取 枚值为 的硬币,其中必定包含 枚,它们贡献 。除此以外,还可以取 0、1、2、……枚,贡献 0、、、……。所以记录为 。每个符合“至少 枚”的选择都能唯一减去这 枚,剩下一个非负数量,因此这样的分解既不漏也不重复。
比如至少一枚 2 单位硬币,且任意枚 1 单位硬币凑 5,先拿走必需的那枚 2,剩下 。剩余 3 可以用三枚 1,或一枚 2 加一枚 1,只有两种。放回必需的 2,就得到 (1 的枚数, 2 的枚数) 、。对应记录是 ,前面的 把每个原来总量增加了 2。
例三:两枚骰子,顺序为什么不能丢?
换一个计数对象。桌上有第一枚和第二枚骰子,每枚的点数可以是 1 到 6。我们现在只计数点数结果,不假设骰子公平,也不计算概率。第一枚出 1、第二枚出 6,与第一枚出 6、第二枚出 1,是两个不同结果,因为两枚骰子可以区分。
每枚骰子每个点数对应一种结果,所以记录是 。没有常数项,因为一枚骰子没有 0 点这个结果。两个因子虽然写法相同,但第一个记录第一枚,第二个记录第二枚;相乘时这两个位置仍然保留着。
第一枚若是 ,第二枚必须是 。让 、2、3、4、5、6,第二枚依次是 6、5、4、3、2、1,每个都在允许范围内。因此有 (1,6)、(2,5)、(3,4)、(4,3)、(5,2)、(6,1),每一对贡献 ,合计 6 种。
下面表格的行保留第一枚的点数,列保留第二枚的点数。格子里写两者之和,✓ 表示和等于目标。拖动目标时,检查哪些格子会被选中,再读下方逐项相加的计数。比如目标 2 只有 (1,1),而目标 12 只有 (6,6)。
| 第一枚 ↓ / 第二枚 → | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 ✓ |
| 2 | 3 | 4 | 5 | 6 | 7 ✓ | 8 |
| 3 | 4 | 5 | 6 | 7 ✓ | 8 | 9 |
| 4 | 5 | 6 | 7 ✓ | 8 | 9 | 10 |
| 5 | 6 | 7 ✓ | 8 | 9 | 10 | 11 |
| 6 | 7 ✓ | 8 | 9 | 10 | 11 | 12 |
不要因为最终的代数乘法可以交换两个因子,就认为可以忘掉对象的区别。把两枚骰子的名字交换,会把 (1,6) 对应到 (6,1),说明两个命名方式有相同的总计数,并没有把这两个结果合并成一个。在硬币题里,我们从一开始就只选每种数量;在骰子题里,我们从一开始就分别选每枚的点数。不同的计数问题,需要不同的记录。
例四:从铺砖的递推得到生成函数
前面的因子来自几种可以分别选择的物品。现在考虑另一种问题:用长度为 1 和长度为 2 的砖,铺满长度为 的单行长条,不能重叠,也不能留空。砖都横着放,1 砖彼此一样,2 砖彼此一样,但从左到右的顺序是铺法的一部分。例如长 3 的条,按“1、2”和按“2、1”排列时,两块砖占据的位置不同。
把长 的铺法数记为 。长 0 时没有格子需要铺,什么也不放就完成要求,所以 。长 1 时只能放一块 1 砖,因此 。这两个起点需要明确写下,因为后面每一步的计数都从它们开始。
当 时,我们按最后一块砖分类。若最后一块长 1,去掉它后,前面正好是长 的完整铺法。反过来,每个长 的铺法后面添一块 1,都得到唯一一个最后是 1 的铺法。这两个操作互相撤销,所以这一类恰有 种。
若最后一块长 2,同样去掉它会留下长 的铺法;在任意这种短铺法后添一块 2 又能唯一恢复,因此第二类有 种。一个铺法的最后一块不能同时是 1 和 2,所以两类没有重叠;砖只有这两种长度,所以每个铺法也一定属于其中一类。于是我们能把两类相加:
用前面的值计算后面的值,这种关系叫递推关系。这里 ;;;。它们属于斐波那契型的递推,但我们不依赖这个名字,而依赖刚才“最后一块砖”的完整分类。
下面蓝色短砖标 1,金色长砖标 2。先保留长 4,逐次点“下一种铺法”,能看到 、、、、 这五种。每一块砖的宽度对应它占据的长度;下面的加法把这个图形和总长连在一起。
选择末砖类别,就只检查这一类的成员;“全部”恢复完整清单。两类的计数来自正文已经证明的较短长条,移除末砖的图让我们直接核对这种对应。
标着 2 的砖宽度是标着 1 的砖的两倍。从左往右读;顺序是铺法的一部分。
移去最后一块长 1 的砖。剩下的长条长度是 。
虚线部分已经移走,不是短长条里的另一块砖。在短长条后添回这一块,就恢复原来的完整铺法。前面所有砖的位置和顺序都保留下来。
现在让同一份记录自己错开一格
我们把全部铺法数记进 。为了让 、 和 出现在同一个指数的位置,可以分别使用 、 和 :乘 把原来的 变成 ;乘 把 变成 。我们不是任意选择乘数,而是要把递推式里的三项对齐。
做 。常数项只有 提供,所以是 。 的系数是 ,因为 还没有 这一项。对每个 , 的系数则是 ;由已经证明的递推式,这正好是 0。我们把起始的两项单独处理,不能把只对 成立的递推套到它们上。
最后的分式仍表示形式乘法逆: 就是乘 后得到 1 的那份记录,而我们是用具体铺法数把它构造出来的。
推导:为什么没有别的记录也满足这个等式
最后的分式仍表示形式乘法逆。它为什么存在并且确定?我们刚才用具体计数构造了 ,证明它乘 得到 1,所以存在。若另一份记录 也有这个性质,常数项强迫 , 的系数强迫 ,所以 ;往后每一项强迫 。因而它的每一项都被相同的起点和规则逐一确定,只能与 相同。
这说明一个短分式可以保存整条递推及其起点。我们没有宣称看见分式就不需要计算:比如求 的系数,仍可按已经证明的规则得到 1、1、2、3、5、8,读取第 5 次幂前面的 8。相较于列出全部铺法,这个递推只保留计数;而生成函数又把递推转成了一个可以与其他记录相乘、移动指数的代数对象。
例如一块装饰板由“固定长 2 的端头”接上一段这样的铺砖长条组成,总长要是 6。端头只有一种,因此贡献 ,整板的记录是 。要凑 ,只能配上 中的 ,其系数是 ,所以有 5 种。这也直接对应“去掉固定端头,剩下长 4”的五种铺法。我们再次用一个具体对象核对了代数。
自己试一试,再逐步核对
下面每题都可以用实际选择来理解,并用系数核对。答案可以展开,不要求记住某个计数公式。重要的是每一步都能说明:我们数的对象是什么,为什么刚好数一次。
1. 最多一枚 2、最多一枚 3,能否凑出 4?为什么常数项仍为 1?
两个数量各有 0、1 两种选择,所以记录是 。分配得到 。没有 项,因此其系数为 0,不能凑出 4。常数项来自两种都不取:这是一个确定的选择,所以系数为 1。
2. 最多两枚 1、最多两枚 2,凑出 4 有几种方法?
记录是 。令 2 的枚数为 : 时需要四枚 1,超过两枚限制,不合法; 时需要两枚 1,合法; 时不需要 1,也合法。因此有两种,数量对为 (2,1) 和 (0,2)。对应 的乘积只有 和 ,每项系数都是 1,合计 2。
3. 若 , 中 的系数是多少?
把 分别乘三项,得到 ,所以系数是 4。指数从 2 增加 3 到 5,但原来 4 种选择仍是 4 种;固定地给每个选择加上总量 3,不会产生新的分支。一般地,对 , 中 的系数就是 中 的系数,因为 ;当 时,不存在非负的 ,系数为 0。
4. 长 6 的铺砖长条有几种?为什么不是只看 2 砖有几块?
由最后一块砖的分类,。数量相同的砖可能按不同顺序摆放:例如长 3 时, 和 都是一块 1、一块 2,却是不同铺法。如果像硬币一样只记录两种数量,就会把它们混在一起。这里的生成函数 来自已经保留顺序的铺砖递推,不是把两个“各取多少”的几何级数直接相乘。
我们从“凑出 2 有两种方法”开始,把每个选择写成一项。由此证明了:加法记录互不重叠的方案,乘法记录可以唯一拆开的组合。指数负责总量,系数负责方法数。无穷供给、有限供给、骰子和铺砖的形式虽然不同,都需要同样的核对:这个系数里的每一份贡献,在原问题中是哪一种选择?弄清这个对应关系,才能知道式子算出的是否正是我们想数的东西。
