组合数学初步

数学还是太菜了 \kk 。

组合数和排列数

定义

高中数学选修三内容。

定义排列数 Anm 为从 n 个不重复的元素中选 m 个按一定顺序排列的方案数。

根据乘法原理易得

Anm=n×(n1)××(nm+1)=n!(nm)!

定义排列数 Cnm 为从 n 个不重复的元素中选 m 个的方案数。

由排列数公式易得

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

也就输排列数除去 n! ,简单易懂。

推广

  • 二项式定理

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

  • 二项式反演

g(i)=i=kn(ni)f(i)

f(i)=i=kn(ni)(1)ikg(i)

常用于解决一类形如 "恰好……" 的问题。这类问题中,一般将其转化为 "钦定……" 的问题便于求解,最后使用二项式反演即可。

例题:P4859P6478

  • 常用的组合恒等式

(一)

(ni)=ni+1i(ni1)

证明:显然。

(二)

(ni)=ni(n1i1)

证明:显然。

(三) 基本求和公式

i=0n(ni)=2n

证明:由组合意义易证。

(四) 交错和

i=0n(1)i(ni)=0

证明:套用二项式定理即可。

(五)

i=0||1nk(ni)=n2n1

证明:

i=1nk(ni)=i=1nin!i!(ni)!=ni=0n1(n1)!i!(n(i+1))!=ni=0n1(n1)!i!(n1i))!=ni=0n1(n1i)=n2n1

总结

在大多数情况下,组合数学最常用的方面是计数问题,或直接根据题面公式计算。

在进行推导时,需灵活使用上述组合恒等式和定理进行代换和化简,必要时,也可以直接通过组合意义抽象出具体问题,需要大量的做题经验。

卡特兰数

卡特兰数是组合数学中的一种常见数列,前几项如下:

1,1,2,5,14,42,132,429,1430,4862,……

公式

从最经典的进出栈问题开始理解,通常大多数卡特兰数问题可以转化为这个。

由简单容斥可得,合法出栈序列 = 总序列个数 - 非法序列个数。

进栈抽象为 + 1 ,出栈抽象为 - 1 。

则序列总个数为 C2nn

非法序列个数比较麻烦,需要转化一下。

找到每个非法序列第一个前缀和小于 0 的地方,将这之前的序列全部反转,容易证明这和原序列一一对应。

那么非法序列总个数即为 C2nn+1

合法序列总个数即为: (Cn 即为卡特兰数的第 n 项)

Cn=C2nnCxnn1=C2nn(n+1)

由组合恒等变换得到递推公式:

Cn=Cn14n2n+1

顺便给一下最基础的通式吧:

Cn={1n=0,1i=0n1CiCni1n2

组合意义/应用

  • n 个元素入栈序列为 1n ,出栈序列的总个数。
  • n 对括号所能组合成的合法括号序列的个数。
  • n+1 个节点所能构成的形状不同的满二叉树的总个数。
  • n 个节点的形状不同的二叉树的总个数。
  • ……

斯特林数

前置知识

上升幂:

xn¯=x(x+1)(x+2)(x+n1)

下降幂:

xn_=x(x1)(x2)(xn+1)

第一类斯特林数

  • 定义

把 1 到 n 排列成 k 个非空循环(或者叫做圆排列?)的方案数,写作 s(n,k)[nk]

  • 公式

加入 n 即可看作自身构成循环或加入到前 n 个数前,易得递推公式:

[nk]=[n1k1]+(n1)[n1k]

  • 推广
  1. s(0,0)=1

  2. s(n,0)=0

  3. s(n,1)=(n1)!

  4. s(n,n1)=Cn2

第二类斯特林数

比第一类斯特林数更为常用。

  • 定义

把 1 到 n 分成 k 个集合的方案数,写作 S(n,k){nk}

  • 公式

和第一类斯特林数类似的:

{nk}={n1k1}+k{n1k}

  • 推广
  1. S(0,0)=S(n,1)=1
  2. S(n,0)=S(n,0)=0
  3. S(n,2)=2n11

斯特林数和上升/下降幂的应用

原本是打算自己找资料的,但看到几篇博文写的实在太好,就摆了。

https://www.luogu.com.cn/blog/wangrx/finite-calculus

posted @   lxg_swrz  阅读(152)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示