【数论】组合数学学习笔记

蒟蒻的组合数学实在是太弱了,所以在初赛之前赶紧来复习一下,大部分内容由 OIWiki 整合而来。

普及知识点标 J,提高知识点标 S

加法原理&乘法原理(J

加法原理

假设完成一项任务有 n方案,每种方案的办法数目为 ai,则完成这项任务的总方法数为 a1+a2++an

乘法原理

假设完成一项任务分 n步骤,每种步骤又有 ai 个办法,则完成这项任务的总方法数为 a1×a2××an

一些排列组合的符号(J

排列数

n 个元素中选择 m 个组成的排列个数(n,mN,mn),用符号 AnmPnm 表示,即

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

如何理解?假设有 n 个人,我们要从中选择 m 个人来排队。对于第一个位置,我们有 n 个人可以选;因为选掉了一个人,第二个位置就只剩下 (n1) 个人可以选。依次类推,第 m 个位置就有 (nm+1) 个人可以选,根据乘法原理把它们相乘起来就是了。

全排列

n 个元素组成的排列个数:Ann=n!

排列数的递推公式

递推边界:iN,Ai1=1

Anm=Anm1×(nm+1)

组合数

n 个元素中选择 m 个组成的组合个数(n,mN,mn),用符号 Cnm 表示,为了表达方便可以简写成 (nm),即

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

如何理解?如果我们从 n 个人中选 m 个人,如果不在乎顺序,就是 Cnm,如果在乎顺序,则选出来的 m 个人还要再全排,得到 Anm。则

Anm=Cnm×Amm=Cnm×m!

组合数的递推公式

递推边界:iN,Ci0=1

Cnm=Cn1m+Cn1m1

如何理解这个递推公式?我们只需要简单的举个例子。我们可以把 Cnm
这个方案,分成两个集合:包含 1不包含 1

如果不包含 1 这个数,则我们需要在剩下的 2n(n1) 个数里面选择 m 个数,即 Cn1m

如果包含,则我们需要在剩下的 2n(n1) 个数里面选择 (m1),即 Cn1m1。根据加法原理把两个集合的方案相加即可。

组合数一些简单的东西

组合数的对称性(J

(nm)=(nnm)

proof: 即对选出来的集合对全集取补集,数值不变。

二项式定理(S

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

其用组合数阐明了一个展开式系数,可以用数学归纳法证明,可是窝太菜了不会,只好给出我的非数学归纳法的证明:

首先我们可以把左边的柿子化成

(a+b)(a+b)+(a+b)n(a+b)

这个柿子展开后有 2n 项,我们要将展开后的柿子合并同类项,最终每一项都形如 k×aibni。我们想知道的就是前面的 k,那么我们就得出一个问题,对于每一个 i (0in),有多少个 aibni,即从 na 中选 ia 方案个数(剩下的都是 b 所以不用管),即 (ni)。所以 k=(ni),所以二项式定理成立。

杨辉三角(J

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1

这是杨辉三角的 010 行,我们会发现第 i 行第 j 个数(j0 开始)对应着 (a+b)i 展开式的系数 (ij),第 nm 列的数(设为 an,m)的递推式为

an,m=an1,m+an1,m1

由于 an,m=(nm),可以推出

(nm)=(n1n)+(n1m1)

这同时也证明了组合数的递推式。

组合数的另一个递推式

(nm)=nm(n1m1)

proof:

(nm)=n!m!(nm)!=nm×(n1)!(m1)!(n1m+1)!=nm(n1m1)

其他一些杂七杂八的东西

(n0)+(n1)++(nn)=i=0n(ni)=2n(1)

(n0)(n1)+(n2)+(1)n(nn)=[n=0](2)

(n0)+(n2)+(n4)+=(n1)+(n3)+(n5)+=2n1(3)

proof:a=b=1 时,代入二项式定理可以证明 (1) 式;当 a=1,b=1 时,代入二项式定理可证明 (2) 式;(1)+(2)2 可以证明 (3) 式。

一些解题技巧

例题1. 六个人站一排,求

(1)甲不在排头,乙不在排尾的方案数。

(2)在上一小问的前提下,甲乙不相邻的方案数。

可以先思考一下。

解答:

(1):对于这类题,我们可以用“正难则反”的方法。什么叫正难则反呢?就是对于从正面很难解答的题型,我们从反面来推。

如这道题,我们发现直接硬算很麻烦,我们可以换一种思路:求出六个人的全排列,再减去甲在排头的方案数和乙在排尾的方案数就行了。答案为

A66A55A55=6!5!5!=480

如果您觉得这正确,那就大错特错了,因为甲在排头,并且乙在排尾被多减了一次!根据容斥原理,我们要把多减去的那部分再加回来,所以正确的答案应该是

A66A55A55+A44=504

(2): 这里我们用分类讨论的方法,我们分四种情况讨论:

  • 甲在排尾,乙在排头:显然,甲乙位置确定中间四个随便排,方案数为 A44

  • 甲在排尾,乙不在排头:那么乙只有 3 种选择(不在排头,且不与甲相邻),剩下的四人随便排,方案数为 3×A44

  • 甲不在排尾,乙在排头:对称地,方案数为 3×A44

  • 甲不在排尾,乙不在排头:我们还可以再分讨:

    • 甲在 2 号位:那么乙只有两种选法,方案数为 2×A44
    • 甲在 3 号位:那么乙只有一种选法,方案数为 A44
    • 甲在 45 号位的情况分别于在 32 号位的情况相同。

综上,总方案数为

A44+3×A44×2+2×A44×2+A44×2=312

例题2. 八个人站一排,求

(1)甲乙必须相邻的排列数。

(2)甲乙必须不相邻的排列数。

解答:

(1):对于这类题,我们可以采用捆绑法,即将甲乙看作一个人,那么就是七个人求全排列,同时甲乙之间是有序的,其内部还需要全排列,所以答案为

A77A22=10080

(2):这个就很水了,“正难则反”,用八个人的全排列减去甲乙相邻的方案数就行,答案不用我说了。

例题3.

某人射击 8 枪,命中 4 枪,恰好有 3 枪连续命中,有多少种不同情况?

解答:

这题应使用捆绑法解答,把连续的 3 枪看作一个,但注意是恰好3 枪连续命中,也就是说另外一枪和这三枪不能相邻,如果容斥或者分讨将会非常麻烦,有什么更简单的方法呢?

这里就要使用我们的插空法,有时也叫隔板法

什么意思呢?我们将没命中的四枪提取出来,

_·_·_·_·_

我们发现,相邻两枪中间都有空位,总共有 4+1=5 个空位,我们只要将捆绑的 3 枪和另外一枪插入到这些空位中,不就满足它们不相邻了嘛?由于这几枪都是无序的,所以答案就是 C52

例题4.

求不定方程 i=1nxi=m正整数解个数。

解答:

这题需要用到隔板法,我们把 m 想象成 m 个相同的小球,我们要把这些小球分成 n 份有多少个方案呢?我们可以在这些小球之间的空位中放入 (n1) 个隔板(一个空位最多只能放一个隔板),这样就能把这些小球分成 n 份了。由于两端不能放隔板,所以有 (m1) 个空位,答案为 Cm1n1

例题5.

求不定方程 i=1nxi=m非负整数解个数。

这题看似和上一题一样,但 xi 变成了非负整数,也就是说 xi 可以为 0,那这样隔板可以放在一起,这怎么算呢?

yi=xi+1,则有 i=1nyi=m+n。我们发现,这里的 yi 都是正整数,且每一个 yi 的解都对应一个 xi,那么我们就很好地转化成了上题,答案即为 Cm+n1n1

组合数学进阶(S

卡特兰数

例题:P1044 [NOIP2003 普及组] 栈

定义 Hn 为卡特兰数的第 n 项。

亿些递推公式

递推边界: H0=1.

Hn=(2nn)n+1

Hn=Hn1(4n2)n+1线性递推,超好用!!1

Hn=(2nn)(2nn1)

Hn={i=1nHi1Hnin21n=1,0

要用到卡特兰数的问题

  1. 2n 个人排成一行进入剧场。入场费 5 元。其中只有 n 个人有一张 5 元钞票,另外 n 人只有 10 元钞票,剧院无其它钞票,问有多少中方法使得只要有 10 元的人买票,售票处就有 5 元的钞票找零?

  2. 一位大城市的律师在她住所以北 n 个街区和以东 n 个街区处工作。每天她走 2n 个街区去上班。如果他从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?

  3. 在圆上选择 2n 个点,将这些点成对连接起来使得所得到的 n 条线段不相交的方法数?

  4. 对角线不相交的情况下,将一个凸多边形区域分成三角形区域的方法数?

  5. 一个栈(无穷大)的进栈序列为 1,2,3,,n,有多少个不同的出栈序列?

  6. n 个结点可构造多少个不同的二叉树?

  7. n+1n1 构造成 2n 项的数列 a1,a2,,a2n,满足 k[1,2n],i=1kai0 的方案数为?

第二类斯特林数

不说第一类是因为第一类不常见。

例题:P3904 三只小猪

定义:S(n,m) (或简写成 {nm})表示将 n 个两两不同的元素,划分为 m 个互不区分的非空子集的方案数。

递推公式

递推边界 S(n,0)=[n=0].

S(n,m)=S(n1,m1)+m×S(n1,m)

递推式的解释可见我的题解

错排列

例题:P1595 信封问题

定义: f(n) 表示将 n 个元素错排(就是第 i 个元素不能放到第 i 个位置)的方案数。

递推公式:

递推边界:f(0)=0,f(1)=1.

f(n)=(n1)(f(n1)+f(n2))

如何理解?对于第 n 个元素,它肯定不能放在第 n 个位置,只能放在前面的 (n1) 个位置上,设 k=1,2,,n1,我们可以把第 n 个元素放在第 k 个位置上,而原来第 k 个位置上的元素有两种选择:

  • 交换到第 n 个位置上,方案数就是对剩下的 (n2) 个元素错排,即 f(n2)

  • 不到第 n 个位置上,方案数就是除去第 n 个位置外的 (n1) 个元素错排,即 f(n1)

对于 k(n1) 种取值,总方案数即为 f(n)=(n1)(f(n1)+f(n2))

圆排列

定义:n 个人全部来围成一圈,所有的排列数记为 Qnn

由于从不同的位置断开会变成不同的队列,有

Qnn×n=AnnQnn=Annn=(n1)!

由此可知,从 n 个人中选 m 个人来围成一圈的排列数为

Qnm=Anmm=n!m×(nm)!

容斥原理

直接看 oiwiki 吧太多了不想写(

鸽巢原理

也叫抽屉原理,它常被用于证明存在性和求最坏情况下的解。——OIWiki

简单情况

n+1 个元素分成 n 组,那么至少一组有两个(或以上)个元素。

证明显然。

推广到一般情况

n 个元素分成 k 组,则至少一组有大于等于 nk 个元素。

反证法证明,假设每组有小于 nk 个元素,则每组最多有 (nk1) 个元素。

(nk1)×k=knkk<k(nk+1)k=n.

矛盾.

总结,将 n 个元素划分成 A1,A2,,Ak ,k 个集合,则至少有一个集合 Ai 满足 Aink

Thank you for reading!

posted @   RuntimeErr  阅读(213)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示