组合数学

定义与符号

  1. n! 表示 n 的阶乘;nk 表示其下降阶乘幂;nk 表示其上升阶乘幂。n!=1×2×...×n,nk=n×(n1)×...×(nk+1),nk=n×(n+1)×...×(n+k1)
  2. Anm 表示从 n 个元素中有序m 个的数量(排列),Anm=n!(nm)!=nm
  3. Cnm(nm) 表示从 n 个元素中选 m 个元素所组成的集合的数量(组合),Cnm=(nm)=n!(nm)!m!=nmm!

计数

计数原理

  1. 加法原理:如果完成一件事有 n 类方法,且第 i 类方法有 ai 种方案,则完成这件事共有 Σai 种方案。
  2. 乘法原理:如果完成一件事有 n 个步骤,且第 i 个步骤有 ai 种方案,则完成这件事共有 Πai 种方案。

计数方法

  1. 捆绑法。将一些元素看成一个整体,先将有限制的元素先进行计算,再将所有元素进行计算。
  2. 插空法。当要求某些元素不相邻时,将有限制的 m 个元素放入 nm+1 个空格之中。
  3. 隔板法。将 n 个元素放入 m 个容器中,相当于将元素分成 m 组。

组合有关恒等式

对称:

(nk)=(nnk)

吸收、提取:

(nk)=nk(n1k1)

加法、归纳:

(nk)=(n1k)+(n1k1)

证明1(组合意义):最后一个人可选可不选。

证明2:写成定义式直接加。

相伴:

(nk)(nk)=n(n1k),k(nk)=(nk+1)(nk1)

证明:写成定义式直接化即可。

上指标反转:

(nk)=(1)k(kn1k)

证明:

(nk)=nkk!=n×(n1)×...×(nk+1)k!=(1)k×(n)×(1n)×...×(kn1)k!=(1)k(kn1)kk!=(1)k(kn1k)

三项式系数:

(nm)(mk)=(nk)(nkmk)

证明1(组合意义):从 n 个元素中选 m 个再从 m 个元素中选 k 个,等价于直接从 n 个数中选 k 个,再从 nk 个中选剩余 mk 个。

证明2:写成定义式直接化即可。

上指标求和:

i=mn(im)=(n+1m+1)

证明1(组合意义):在 n+1 个元素中选 m+1 个元素,等价于强制在前 i 个元素中选 m 个元素,再在后面元素中选一个的方案数。

证明2:

(n+1m+1)=(nm)+(nm+1)=(nm)+(n1m)+(n1m+1)=(nm)+(n1m)+(n2m)+(n2m+1)=i=0n(im)=i=mn(im)

平行恒等式:

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

证明:

i=0n(m+ii)=i=0n(m+im)=(m+n+1m+1)=(m+n+1n)

范德蒙德卷积/下指标卷积:

i=0k(ni)(mki)=(n+mk)

证明:一共有 n+m 个元素,以 n 为断点,在两边分别选一些元素,等价于直接在 n+m 个元素中选 k 个元素。

下指标点积:

i=0m(ni)(mi)=(n+mm)

证明同上。

上指标卷积:

i=0k(in)(kim)=(k+1n+m+1)

证明:把 k 个元素分成两部分,每部分分别选 nm 个,等价于有 k+1 个元素,先选择其中一个作为隔板,然后再选出 n+m 个元素。

组合数相关

Lucas 定理

(nm)(npmp)(nmodpmmodp)(modp),pprime

证明:(pi)modp=[m=1m=p] (a+b)pap+bp(modp)

(nm)=[xm](1+x)n (1+x)n=(1+x)pnp(1+x)nmodp

(1+x)n(1+xp)np+(1+x)nmodp(modp)

对于每一个 m,都有 m=pmp+mmodp

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

二项式定理

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

证明:在 n(x+y) 中分别选一项,可以考虑枚举 x 个数分别算贡献。

拓展

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

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

证明:数学归纳法。(以第一个为例子)

  • 基本情况:当 n=1 时,有 x+y=x+y
  • 归纳步骤:已知 n 成立,当 n 变成 n+1 时,左式多出 x+yn,代入右式得到:

i=0n(ni)xiyni(x+yn)=i=0n(ni)xiyni((xi)+(yn+i))=i=0n(ni)xi+1yni+i=0n(ni)xiyni+1=i=1n+1(ni1)xiyni+1+i=0n(ni)xiyni+1=xn+1+yn+1+i=1n(ni1)xiyni+1+i=1n(ni)xiyni+1=xn+1+yn+1+i=1n(n+1i)xiyni+1=i=0n+1(n+1i)xiyn+1i

牛顿级数

Δna 表示数列 a 差分 n 次后的数列,则有:

Δnai=j=0n(1)j(nj)aij

证明1:数学归纳法。

  • 基本情况:当 n=0 时,有 ai=ai
  • 归纳步骤:已知 n 成立,当 n 变成 n+1

Δn+1ai=ΔnaiΔnai1=j=0n(1)j(nj)aijj=0n(1)j(nj)aij1=j=0n(1)j(nj)aij+j=1n+1(1)j(nj1)aij=ai1+(1)n+1ain+j=1n(1)j(nj)aij1+j=1n(1)j(nj1)aij=ai1+(1)n+1ain1+j=1n(1)j(n+1j)aij=j=0n+1(1)j(n+1j)aij

证明2:定义平移算子 E,不变算子 I,则差分算子 Δ=IE。所以有:

Δnai=(IE)nai=(j=0n(1)j(nj)EjInj)ai=j=0n(1)j(nj)aij

错排

fn 表示长度为 n 的、不存在 pi=i 的排列个数,则有:

fn=(n1)(fn1+fn2)

证明:考虑第一个元素有 n1 种放法,设放到位置 k,那么元素 k 就有两种情况:如果放在一,则剩余元素有 fn2 种放法;否则则视为元素一加入含 k 的置换环中,等价于在 n1 元素组成的置换环中插入元素一,则有 fn1 种。

拓展鸽巢原理

(i=1npi)n+1 个元素放入 n 个集合,一定存在一个集合 i,使得第 i 个集合至少包含 pi 个元素。

证明:反证法。先假设第 i 个集合中放了 pi1 个元素,则会有一个元素不在集合中。

posted @   Lyrella  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示