网课-组合数学学习笔记

Preface

“用组合意义刻画左右两边,然后发现左右两边讲的是同一个东西。”

“一堆括号乘起来,相当于每个括号里挑一个乘起来,再相加。”

处理求和问题的技巧:当遇到瓶颈时,试着调换 的顺序是一个好办法。


加法、乘法原理

  • 加法原理:同一步之间

  • 乘法原理:不同步之间


排列

Anm=n!(nm)!


组合

又称二项式系数。

(nm)=n!m!(nm)!


下降幂

nm=i=nm+1ni=n!(nm)!=(nm)m!

从组合意义上考虑,下降幂和排列数实际是一样的:在 n 个东西里选出 m 个东西的排列数。

《具体数学》中是通过和普通幂函数 y=xm 进行比较来引出下降幂的。具体地说,定义 Df(x) 表示 f(x) 的微分(即导数),Δf(x) 表示 f(x) 的差分(即 Δf(x)=f(x+1)f(x))。那么 y=xmDy=mxm1y=xmΔy=mxm1,很相像。

此时 a 的定义域可以达到整个实数域(甚至复数域,但我不清晰)。比如,(2)3=(2)×(3)×(4)=24(12)2=12×(12)=14

据下降幂定义的广义二项式系数:对于实数 a 和非负整数 n,有:

(an)=ann!

有时候如果 (nm)n 很大而 m 很小,可以转用下降幂计算。


组合数基本公式

对称公式:

(nm)=(nnm)

加法公式:

(nm)=(n1m)+(n1m1)

吸收公式(用于求和):

m(nm)=n(n1m1)

三项恒等式:

(ab)(bc)=(ac)(acbc)

组合意义:左边代表在 a 个东西中选出 b 个东西,再在 b 个东西中选出 c 个东西;右边代表在 a 个东西中选出 c 个东西,再在剩下的 ac 个东西中选出 bc 个东西。


组合数求和

  • 上指标求和:

i=ab(ia)=(b+1a+1)

代数推导:可使用数归法证明。

组合意义:右边代表在 b+1 个东西中选出 a+1 个东西;左边代表枚举第 a+1 个东西。

  • 平行求和:

i=0n(a+ii)=(a+n+1n)

代数推导:运用对称公式可将平行求和转化为上指标求和。

组合意义:右边代表在 a+n+1 个东西中选出 n 个;左边代表枚举前 ni 个必选。


二项式定理

(a+b)n=i=0n(ni)aibni

代入 a=b=1 得:

i=0n(ni)=2n

  • 广义二项式定理:对于任意实数 x,y,n,有

(x+y)n=i=0(ni)xiyni

注意到如果 n,aN,则必定有 an=0(an)=0。故不难理解在真正把 nN 代入后二项式定理展开后,有很多为 0 的项,最后得到的多项式都是有限的。

这个的证明在学了 泰勒级数 后是相当显然的。

  • 下降幂的二项式定理:对于任意实数 a,b 和非负整数 n,有

    (a+b)n=i=0n(ni)aibni

可使用数学归纳法求证。


范德蒙德卷积

  • 范德蒙德卷积恒等式:

i=0a(ni)(mai)=(n+ma)

组合意义:左边代表 n 中和 m 中一共选出 a 个;右边代表直接在 n+m 中选出 a 个。

生成函数:令 f(x)[xm] 表示 f(x)xn 的系数,则等式左侧为 (x+1)n(x+1)m[xa],右侧为 (x+1)n+m[xa]

  • 上指标范德蒙德卷积恒等式:

i=anb(ia)(nib)=(n+1a+b+1)

组合意义:右边表示在 n+1 个东西中选出 a+b+1 个;左边表示枚举第 a+1 个东西。

生成函数:等式右侧为 (x+1)a+b+2[xnab],等式左侧为 (x+1)a+1(x+1)b+1[xnba]。(至于这个构造到底是怎么想到的,可能得等学了生成函数再回头看了。)


Lucas 定理

(nm)(nmodpmmodp)(npmp)(modp)

什么时候使用 Lucas 定理?p 为质数且 n,mp 时。


隔板法

把一个有 n 个不相同物品的序列分成可以为 0m 段,方案数为:

(n+m1m1)

如果隔板法的每个间隔有下界(下界可以不同,但是第几个间隔的下界是多少必须固定),可以先把下界总数从 n 中减去。

P5520 [yLOI2019] 青原樱:可将树看作隔板。


环排列

n 的长度,m 种颜色。可以旋转,不能翻转。

mnn


多重集排列数

(a1+a2++an)!a1!a2!an!


错位排列

排列上每个位置的数和其下标的值都不一样。

Dn 表示长度为 n 的错位排列数量,则有:

Dn=(n1)(Dn1+Dn2)

思路主要是将数值 n 先接到一个长度为 n1 的序列后,然后通过把最后一项与前 n1 个项中的一项交换得到错位排序。

P4921 [MtOI2018] 情侣?给我烧了!(头好晕,回头来看。)


卡特兰数

Cn 表示长度为 2n 的合法括号序列数量。

递推式(枚举第一个括号对内部括号数量):

Cn=i=0n1CiCn1i

组合数:

Cn=1n+1(2nn)


第二类斯特林数

{nm} 为将 n 个不同元素划分成 m 个无标号非空集合的方案数。

O(n2) 递推:

{nm}=m{n1m}+{n1m1}

普通幂转下降幂:

mn=i=0n{ni}mi

组合意义:左侧为用 m 种颜色给 n 个物品上色;右侧为将 n 个物品分为若干组,每个组涂同一种颜色。

  • 例一:

    i=0nik

    其中 n109,k5000

    使用第二类斯特林数将普通幂转为下降幂,再将下降幂转为组合数,使用上指标求和。

  • 例二:P6620 [省选联考 2020 A 卷] 组合数问题

    这道题推式子有两点巧妙。一是通过调换 顺序把下降幂与多项式系数分离,二是最后二项式定理容易瞪不出来。


鸽巢原理

n 个球放入 k 个盒子中,则至少一个盒子里有 nk 个球,至少有一个盒子里有 nk

  • Kuroni and Impossible Calculation:这道题等价于将 n 个球放入 m 个盒子内。如果有 nm,则必定存在一个盒子内有超过两个球,答案则必等于 0。其余情况即 n<m 暴力即可。

Prufer 序列

一个值域为 [1,n],长度为 n2 的序列。它与一棵 n 个节点的有标号树互为双射。

由树构造 Prufer 序列:每次选标号最小的叶子节点,删去,并记录它所相连的节点。直到只剩两个节点。可以用堆维护。

由 Prufer 序列构造树:每个点的度数为在 Prufer 序列中出现次数 +1,因此可以维护当前标号最小的叶子节点。

结论:n 个点的不同有标号生成树数量:

nn2

一些树的组合计数问题可以转化为 Prufer 序列的组合计数问题求解。

  • 例一:

    image

    image


Burnside 定理

置换群学习笔记

P4128 [SHOI2006] 有色图


基本容斥

“当我们需要计算不满足条件 A 的方案数时,有时会选择正难则反,用总方案数减去满足条件 A 的方案数来得到答案。”

image

显然 S2n 级别的。因此,使用容斥原理时的 n 一般来说都比较小,或者说可以通过组合数合并某些情况。

  • P1450 [HAOI2008] 硬币购物:限制是每种硬币的个数,用硬币使用没有任何限制的方案数用容斥减去有硬币超过的。

  • 再谈错排:限制是值和下标不相等。

  • Another Filling the Grid:部分直接使用限制条件,其余限制使用容斥。

  • n 个点的有标号 DAG 个数,其中 n5000:并没有听懂。

  • P5664 [CSP-S2019] Emiya 家今天的饭:此题的引入部分用到一点容斥,即计算每种菜品超过一半的方案数,而又因为只可能同时有一种菜品超过一半,计算并不为 2n 级别。真正巧妙之处在 DP 方程剔除无关状态。


minmax 容斥

image

image

(感觉上面的证明有点问题,应该只有在 ai 互不相等的情况下才能这么推吧?)

如果我们要通过 minmax,也一样有:

maxiSai=TS,T(1)|T|+1miniTai

  • P5643 [PKUWC2018] 随机游走:这道题的用 minmax 容斥转为正常期望 dp 后,时间复杂度为 O(2nnq)。如果想要让时间复杂度更低,需要使用高维前缀和(在 这篇博客 中阐释得还清楚,它尤其在求二进制子集的和时使用)。

  • Become Big For Me


二项式反演

image

image

主要用于 f(x)g(x) 之间的互化。题目一般要求 g(x),而 f(x) 是一个人为构造的、比较好求的函数。

更具体地说,二项式反演的题目中 g(x) 一般是“恰好”的方案数,f(x) 一般是构造为“钦定”某组元素必选、然后求方案数。二者之间满足的反演关系证明如下(这是以下面集合计数一题为例的,下文的 intersect(C) 表示 C 方案中交集的大小):

image

image

image

  • 集合计数:我觉得一大难点在看出来所谓 f(k),即“钦定了 k 个元素在交集里的方案数”是很好求的(这是一个任选若干集合的问题);另一大是在推导 f(x)g(x) 的关系时。

  • P4859 已经没有什么好害怕的了:这个和上一道题是一样的构造方法。

  • Stranger Trees

  • 扩展 minmax 容斥:通过二项式反演给每个 max 添上系数,扩展到第 k 小的 minmax 容斥。

    image


普通生成函数(OGF)

生成函数是一个很美妙的东西。它在代数与组合数学之间建立了联系,并且将一些复杂的组合问题巧妙地化为了代数问题。

image

这是生成函数的一种,被称为 OGF(普通生成函数)。

根据定义可以发现,序列相加则对应生成函数相加,序列做数乘则对应生成函数做数乘。换句话说,如果我们定义一个以序列为参数、以其生成函数为返回值的函数,那么该函数将会是一个线性函数。然而,生成函数相乘将遵循多项式乘法的规则,这时生成函数相乘就不等同于序列对应项相乘了。

当该多项式存在无穷项时,我们也可以称其为形式幂级数环。虽说是无穷项,但其实很多的形式幂级数环都可以通过相减法、微积分等方法化为封闭形式。很美妙不是么——看上去无穷的函数其实可以那么简洁地表示出来。

  • 例一:等比数列

    等比数列的形式幂级数环为:f(x)=i=0cixi,而 cxf(x)=i=1cixi,二者相减得到 (cx1)f(x)=1,故而 f(x)=1cx1

    image
    (图例:数列 1,1,1, 的生成函数和它的封闭形式)

  • 例二:斐波那契数列

    斐波那契数列的形式幂级数环为:F(x)=i=0fixi。在等式 fi=fi1+fi2 两侧乘上 xi、并对该方程求和,则有 i=2fixi=i=2fi1xi+i=2fi2xi,等同于 F(x)x=xF(x)+x2F(x),于是可得:F(x)=xx2x+1

  • 例三:差为 1 的等差数列

    该数列的形式幂级数环为:f(x)=i=0ixi。在等式 ai=ai1+1 两侧乘上 xi,并……(后面和斐波那契的做法是一样的)……最终得到 f(x)=x2+x+1x22x+1

以下是一些常见数列(形式幂级数)的封闭形式:

image

(其中后三个的证明都需要用到 泰勒展开 或广义二项式定理)

那么把一个形式幂级数环大费周章化为封闭形式有什么用呢?举个例子,在一个题目中,你想要求一些形式幂级数环的卷积的通项公式。你就可以先求得这些形式幂级数环的封闭形式,然后用它们的封闭形式相乘,得到它们卷积的封闭形式。接着,你就可以将这个卷积的封闭形式拆分为若干较为简单的函数之和。由于你知道这些简单函数所对应的形式幂级数环是什么,你就可以得到这个卷积的形式幂级数环,也就得到了卷积对应序列通项公式。卡特兰数的通项公式就是这么得到的。

生成函数的一大用处是刻画组合问题。一般来说,我们把一些个数限制刻画为函数中 x 的上标,方案数刻画为 x 的系数,然后通过多项式相乘来实现在每组内选一个,并且答案为某一项的系数。

  • 例一:

    image

    image

  • 例二:

    (背包问题):有 n 种物品,第 i 种物品有 ci 个,每个代价为 wi 元。求花了 m 元的方案数。

    这个的生成函数应该是 i=1nj=0cixjwi,答案为 [xm]

    与前一个问题不同的地方在于,背包问题是一种中仅能选一个,所以我们选择将同一种物品的不同次幂归在一个括号内;而前一个问题则是若干种都能选任意次,因此将每个种归在一个括号内,求同一个括号的次幂即可。


指数生成函数(EGF)

image

指数生成函数又称 EGF。与前面提到的 OGF 是相对的。

《具体数学》是这么解释引入 EGF 的原因的:当原数列 ai 的 OGF 相当复杂,而 aii! 的 EGF 相当简单时,我们将更情愿研究它的 EGF。

image

  • ai=ci:这个对 x 进行一个换元为 cx,再根据 bi=1i! 的封闭形式为 ex,就可以相当容易地证得。

  • ai=ci:它的 EGF 显然为一个二项式定理的展开形式。

  • ai=[imod2=0]:因为生成函数的加法等同于对应序列的加法,这里可以看作将 imod2=1 的项减去了。

EGF 主要用于刻画若干种数的排列问题。详见排列组合一题。

  • 排列组合

    image

    image

    这道题揭示了用 EGF 刻画的本质:将组合数进行拆解,即可将 OGF 转化为 EGF。答案则通过乘上 n! 将 EGF 还原为 OGF。

  • 例二:

    image

    列出绿色、红色、蓝色的 EGF,将这三个 EGF 相乘,得到答案的 EGF,即可得到答案的通项公式。

  • 再谈二项式反演:

    image


多项式 exp / 多项式 ln

  • 多项式 exp

    image

    “良定义”即能在有限的求和内求出每一项的值,尽管原本的式子是个无限求和。

    为什么一定要在 F(x)[x0]=0 的条件下呢?当 F(x)[x0]=0 时,最低的次项为 x1;此时如果你想要拼凑出次数为 n 的项,在每一次都选 x1 的情况下,你最多仅能选 n 次,即有效的 i<n;反之,当 in 时,就绝对拼凑不出 xn 项。而当 F(x)[x0]0 时,由于能够选到 x0in 也就可以拼凑出 xn,这个运算也就不良定义了。

  • 多项式 ln

    image

    至于怎么证明 ln(x+1) 的形式幂级数环是这个,需要用到 微积分

说来这两个东西本身有什么用呢?我们可以考虑 F(x)ii! 的组合意义:在若干组物品中,每组有 fi 个,在可以重复选一个物品的情况下选出 i 个的方案数。则 eF(x) 的组合意义为:在若干组物品中,每组有 fi 个,在可以重复选一个物品的情况下,选出任意个的方案数。

组合意义是钉死了的。所以这么看来多项式 exp / 多项式 ln 的应用范围是比较狭窄的。


点值表示与下降幂表示

image

image

用人话阐释一遍这个定理:对于一个多项式,它的点值表示的 EGF,与它的下降幂表示的生成函数,满足一个类似前面二项式反演的关系。

这玩意儿只能说是相当的怪异。但它提供了一种在点值表示和下降幂表示之间互化的思路。

  • Similar Polynomials

    首先如果我们已经有了这两个多项式的系数,我们就可以通过二项式定理得到某一个 xi 的系数的方程,很容易求解 s

    然后因为下降幂也有二项式定理,我们只需要套前面的式子,求出下降幂表示就行了。

posted @   David_Mercury  阅读(169)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示