网课-组合数学学习笔记2

基础

插板法

n 个无标号物品分成 m 个有标号组。

  • 非空:

    (n1m1)

  • 有空:

    (n+m1m1)

    构造 一一对应的转化

    现有两个集合 A,B。如果所有 A 中的元素都能够映射到 B 中,则 |A||B|;反之,如果 B 能映射到 A,则 |B||A|。二者同时成立,则 |A|=|B|

  • 组大小有上界:

    考虑容斥。(二项式反演型容斥。)

    image

    容易将赢的场次转化为连续段内点。然后就容易通过上面的方法得到 K 的解法。最后用 K 减去 K1 即可。


Catalan 数

Catalan(n)=(2nn)(2nn1)

wrpwrp 给出了一个特别妙的证法:

Catalan 数的一种表示方式为,从网格图的 (0,0) 位置,每次向上 / 向右走,走到 (n,n) 且始终不会碰到直线 y=x+1 的方案数。

研究不合法的路径:

image

发现所有不合法的路径可唯一映射到一条 (0,0)(n1,n+1) 的路径。易得。

这个方法被称为“折线法”。

折线法进阶:


斯特林数

  • 第一类斯特林数

    n 个不同元素构成 m 个无标号非空圆排列的方案数。

    [nm]=[n1m1]+(n1)[n1m]

  • 第二类斯特林数

    n 个不同元素划分 m 个无标号非空子集的方案数。

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

  • 普通幂转下降幂

    mn=i=0m{min(n,m)i}mi

    • 例一:Cards

    • 例二

      image

      一种方法是咔咔咔用斯特林数推式子,可以做到 O(k2)

      如果使用 拉格朗日插值,则可以做到 O(k)

      拉格朗日插值:如果我们有如果我们有一个 n 次多项式的 n+1 个不同的点值 (xi,yi),我们可以通过拉格朗日插值公式还原这个多项式。

      f(k)=i=0nyiijkxjxixj

      证明:如果默认结论“n+1 个点值即可确定一个 n 次多项式”结论成立,那么我们构造的 f(k) 显然有次数为 n 且有点值 (xi,yi)

      回到这道题,有一个结论:

      i=1nik 为一个关于 nk+1 次多项式。

      证明:使用数学归纳法。假设 i=1n1ik 可表示为一个关于 n1k+1 次多项式 T(n1),满足 T(x)=i=0k+1aixi。那么如果 T(n)=i=1nik 要成立,则 T(n)=T(n1)+nki=0k+1aini=nk+i=0k+1ai(n1)i 应当有解,而这的确是有解的。

      一个费解的点是:为什么不是关于 nk 次多项式?如果是这样,则方程 i=0kaini=nk+i=0kai(n1)i 应该有解;而最高项系数,则应有 ai=ai+1,这显然是错误的。

      现在我们只需要求出 n=1,2,,k+2 时的点值,代入拉格朗日插值公式即可计算。直接暴力套公式是 O(k2) 的,但由于我们代入的 xi 是连续的,连乘的结果可以用阶乘表示,于是预处理阶乘后可以做到 O(k)


杂题



容斥 & 反演

基本容斥

image

Pi 表示“满足某种性质的元素的集合”。

左侧:具备至少一种性质的元素个数。

右侧(第一个 内):至少具备 S 中所有性质的元素个数。

使用时,我们常常使用其来求解“不具备任何性质的元素个数 = 全部元素 - 具备至少一种性质的元素个数”。

证明见下方“Trick:推容斥系数”。

image

  • P3349 [ZJOI2016] 小星星

    容斥优化 排列计数 问题。

    本题有朴素状压做法设 f[i][j][S] 表示第 i 个点的编号为 j,且其子树的编号选法为 S。有子集枚举复杂度 O(n33n)

    注意到我们枚举子集的目的实际是为了避免重复编号。于是可以做容斥,钦定必须在 S 中选取编号。

    *另外我还有一个想法,我们能不能钦定哪些边不在图中呢?——不好处理边之间的相对位置关系。

  • Trick:推容斥系数

    image

    有什么用?当 fi(即容斥系数)不好求时,我们能够将不同的 C0 代入,然后高斯消元求解。

    我们先拿它来证明最基本的容斥。考虑每一个元素 xi=1nPi,它对于容斥最终结果的贡献应当为 1。设 x 一共在 k 个不同的集合中,Ci 表示 xi 个集合中同时出现的情况,则有:

    i=1k(ki)fi

    再由二项式定理得:

    i=0k(ki)(1)i=i=0k(ki)(1)i=(1+1)k=[k=0]

    故令 fi=(1)i+1,则有:

    i=1k(ki)(1)i+1=(1+i=0k(ki)(1)i)=1

    image

    构造条件 Ci 表示至少 i 个数在相同位置上,并代入不同 C0 表示恰好 m 个位置在不同位置上。

    i=0m(mi)fi=am

    这里可以直接 O(n2) 递推解出 fi


关于反演:

image


二项式反演

image

以第一个式子的证明为例。推导过程难点在一开始设出一个式子:

fn=m=0n[nm=0](nm)fm

然后代入这个重要的式子:

k=0n(1)k(nk)=[n=0]

接着咔咔咔推一下就可以了。

考虑上面二项式反演的组合意义。后者拥有更加常用的组合意义,即 gk 表示钦定选择 k 个、其它任选的方案数,fk 表示恰好选择 k 个;前者则用“错排”来解释比较合适,gn 表示 n 个人随便站的方案数,fn 表示恰好 n 个人都站错的方案数。


子集反演

image

其实这两个式子,前者代表 FG 高维前缀和,后者代表 GF 高维差分。(这可以称为定义式。)

高维差分的计算方式实际与高维前缀和一模一样,是逐位做减法。

这次证明代入的关键式为:

TS(1)|T|=[|S|=0]

其它与二项式反演大同小异。

  • P6442 [COCI2011-2012#6] KOŠARE

    同样,子集反演也可以用于“恰好”与“至多 / 至少”的转换。

  • [ARC101E] Ribbons on Tree

    没太懂。我认为直接称之为容斥 DP 会更合适,考虑一条边加 / 不加入,然后分成若干连通块。过会儿推一下。


min-max 反演

image

  • P3175 [HAOI2015] 按位或

    ti 表示第 i 位变为 1 的时间,答案等价于 E(maxi=0n1ti)

    使用 min-max 反演。

    E(maxi=0n1ti)=S[1,n](1)|S|+1E(miniSti)

    E(min) 是很好求的因为可以贪心。

image


斯特林反演

image

  • 例题一:

    image

    f(n,m) 表示只限制行不等价的情况下的方案数,则有:f(n,m)=(cm)n

    f(n,m) 表示行、列都不等价的情况下的答案,则有:

    f(n,m)=i=1m{mi}g(n,i)

    相当于枚举等价类。

    Tips:以后做组合计数问题,可以先弱化问题,然后找弱化后式子和要求式子的关系。

  • 例题二:P10591 BZOJ4671 异或图

    图上问题经常的套路就是将“连通”给容斥 / 反演掉。

    fi 表示恰好有 i 个联通块的方案,gi 表示钦定 i 个子集的方案(求解方法:将图划分为 i 个子集,子集内随便连边,子集间不连边)(注意不等同于 fi 的后缀和),有如下式子成立:

    gk=i=kn{ik}fi

    f1=i=1n(1)i1(i1)!gi

    接下来需要求出 gi。这时可以直接枚举子集的划分情况,划分种类数为 贝尔数(即第二类斯特林数的一个前缀和),然后计算连边方案数(使用线性基计算自由元个数)。



生成函数(GF)

多项式定理

多项式 (x1+x2+x3,···,xt)n 的展开式中 x1n1x2n2xtnt 的系数
是:

n!i=1tni!=(nn1,n2,,nt)

其中 ni=n


广义二项式定理

image

image

上指标反转可以在 n<0 时用于将上指标化为正形式。


幂级数展开

使用平凡广义二项式定理即可展开的:

image

观察 11x1(1x)2,猜想:

1(1x)3=1+3x+6x2+10x3+

在 GF 中,乘上 11x 等价于做前缀和,乘上 (1x) 等价于做差分。而乘上形如 x,1x 的项则是将下标左右平移。

使用泰勒公式展开的:

image


OGF

image

  • 例一:

    image

    正确性是由于若干括号相乘,等价于每个当中挑一个相乘,将所有方案相加。

  • P10780 BZOJ3028 食物

    就我最菜,连因式分解和完全立方公式都想不到 :(

    (a+b)3=(a+b)(a2+b2ab)=a3+3a2b+3ab2+b3


EGF

image

更确切地说,EGF 主要被用于处理若干序列的合并问题。

为什么这么说呢?举例:

fi+j=gihj(i+ji)

1(i+j)!fi+j=1i!gi1j!hj

  • 例一:

    image

    仅含偶数项的 EGF:

    G(x)=1+x22!+x44!+=ex+ex2

  • 例二:

    image


应用

  1. 推导数列通项公式

    例,斐波那契、卡特兰。

  2. 多项式操作

    三个:多项式求逆、多项式 ln、多项式 exp。

    O(nlogn) 复杂度方法见

    如果遇到不卡 O(n2) 的情况,我们可以对其求导后推一个简单的递推式。

  3. 例题

    • 例一:

      image

      生成函数的设计

      实际有几种选择:

      • 以每种长度的骨牌为单位,构建选择几个骨牌的 EGF。

      • 以选了几个骨牌为单位,构建选择每种骨牌的 OGF。

      经过实践选择后者更加简洁。

      注意不能有 A0=1,因为可能会导致前面的项与后面的项有重复方案。

      有答案的生成函数为:

      i=0nAi(x)=11A(x)

    • 例二:

      image

      考虑枚举环,将若干棵树拼到环上。

      根据 Prufer 定理,n 个点有标号无根树的数量为 nn2;故有 Cayley 定理,n 个点有标号有根树的数量为 nn1。所以有有根树的 EGF 为:A(x)=n1nn1xnn!

      接着枚举环。注意,这里的环翻转、旋转都会重复,故根据 Burnside 定理,长度为 k 的环的数量为 k!2k。因此答案的 EGF 为:

      ans=12k3Ak(x)k=12ln(1A(x))A(x)2A2(x)4

      (为什么不能直接像下一题,城市规划,那样做?)

    • 例三:P4841 [集训队作业2013] 城市规划

      这道题不同于前两道的一点在于,我们需要自己构造一个生成函数。(类似于反演题目。)

      g[n] 表示 n 个点有标号无向连通图数量,f[n] 表示 n 个点有标号无向图数量,可以发现有:

      F=eG

      于是求 F 的多项式 ln 即可。

posted @   David_Mercury  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示