【组合数学】知识点汇总

一.排列

1.概念:从n个不同的元素中,取出m个排成一列,称为n个元素中取出m个元素的一个排列(permutation)

2.排列数:从n个不同元素中取出m个元素的排列方案数。符号记为 A n m A^m_n Anm

计算公式 A n m = n ⋅ ( n − 1 ) ⋅ ( n − 2 ) ⋅ ⋅ ⋅ ( n − m + 1 ) A^m_n=n\cdot(n-1)\cdot(n-2)\cdot\cdot\cdot(n-m+1) Anm=n(n1)(n2)(nm+1)

理解:从n个元素中取出m个进行排列,第一个元素有n种选择,第二个元素有n-1种选择……最后一个元素有n-m+1种选择

特殊地:当m>n时,排列数为0,当m=n时,又称全排列,排列数为n!

排列数的另一个计算公式 A n m = n ! ( n − m ) ! A^m_n=\frac{n!}{(n-m)!} Anm=(nm)!n!

理解:
①可以直接由前面的式子数学推导而来

②先将n个元素进行全排列得到 n ! n! n,然后取前m个元素的排列方案,每种方案都会重复 ( n − m ) ! (n-m)! nm次(后n-m个元素的全排列),所以要除以 ( n − m ) ! (n-m)! (nm)!

3.圆排列

从n个元素中取m个元素圆排列的个数为 A n m m = n ! m ⋅ ( n − m ) ! \frac{A_n^m}{m}=\frac{n!}{m\cdot(n-m)!} mAnm=m(nm)!n!

相当于每种排列方案都被重复计算了m次

比如m=3,则{1 2 3},{3 1 2} ,{2 3 1}都是同一种圆排列,但在算排列数时被计算了3次

4.多重集的排列

多重集:允许元素重复的特殊集合

如果每个元素可以取多次甚至无限次,从中取m个排列的方案数我们可以用生成函数(母函数)来计算

指数型母函数解多重集排列问题

5.错排问题

问题: 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?
这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。

记n个元素的错排方案数为D(n)

随机取第k个元素,我们可以将其放置到除了k位置以外的其它任意位置,即n-1种选择

假设我们选择将第k个元素放置到m位置,则第m个元素位置被占了,要放到其它位置上,我们面临两种选择:

①将m元素放置到k位置上,即将m和k互换了位置,这两个元素错排完成,那现在场上还有n-2个元素没有排,即D(n-2)

②不把m元素放置到k位置上,那现在的情况就是m不能放在k位置上,我们不考虑已经放好的k元素,然后将k位置当作m的位置(因为m不能选k位置),是不是就是n-1个元素的错排呢?即D(n-1)。

综上,得递推公式D(n)=(n-1) [D(n-1)+D(n-2)]

该式经过一系列推导可得:

D ( n ) = n ! ⋅ [ ( − 1 ) 0 0 ! + ( − 1 ) 1 1 ! + ( − 1 ) 2 2 ! + … + ( − 1 ) n − 1 ( n − 1 ) ! + ( − 1 ) n n ! ] D(n) = n! \cdot [\frac{(-1)^0}{0!}+\frac{(-1)^1}{1!}+\frac{(-1)^2}{2!} + … + \frac{(-1)^{n-1}}{{(n-1)!}} +\frac{ (-1)^n}{n!}] D(n)=n![0!(1)0+1!(1)1+2!(1)2++(n1)!(1)n1+n!(1)n]

(也可以用容斥原理的思想直接推导,详情见百度百科)

由泰勒展开 e x = 1 + x + x 2 2 ! + x 3 3 ! + ⋅ ⋅ ⋅ + x k k ! + ⋅ ⋅ ⋅ e^x=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\cdot\cdot\cdot+\frac{x^k}{k!}+\cdot\cdot\cdot ex=1+x+2!x2+3!x3++k!xk+

得D(n)= [ n ! ⋅ e − 1 + 0.5 ) ] [n!\cdot e^{-1}+0.5)] [n!e1+0.5)] 用[]表示向下取整,这么写是为了避免泰勒展开余项(余项值小于1/2)的0影响

二.组合

1 概念: 从n个不同的元素中,取出m个作为一组(不考虑顺序),称为从n个元素中取出m个的一个组合

2.组合数: 从n个不同元素中取出m个元素的组合方案数,符号记为 C n m C_n^m Cnm

计算公式: C n m = A n m m ! = n ! ( n − m ) ! ⋅ m ! = n ⋅ ( n − 1 ) ⋅ ( n − 2 ) ⋅ ⋅ ⋅ ( n − m + 1 ) 1 ⋅ 2 ⋅ 3 ⋅ ⋅ ⋅ m C_n^m=\frac{A_n^m}{m!}=\frac{n!}{(n-m)! \cdot m!} = \frac{n\cdot(n-1)\cdot(n-2)\cdot\cdot\cdot(n-m+1)}{1\cdot2\cdot3\cdot\cdot\cdot m} Cnm=m!Anm=(nm)!m!n!=123mn(n1)(n2)(nm+1)

理解:从n个元素中取出m个元素的排列数为 A n m A_n^m Anm,取出的m个元素排列方案数为m!,而组合是不考虑元素的排列顺序的,所以相当于每种组合方案被算了m!次。

3.多重集的组合

普通型母函数解多重集组合问题详解

4.常用公式
C n m = C n n − m C_n^m=C_n^{n-m} Cnm=Cnnm (当m较大时计算 C n n − m C_n^{n-m} Cnnm

C n m = C n − 1 m + C n − 1 m − 1 C_n^m=C_{n-1}^m+C_{n-1}^{m-1} Cnm=Cn1m+Cn1m1(杨辉三角形,一数等于其肩上两数之和)

C n m = n − m + 1 m C n m − 1 C_n^m=\frac{n-m+1}{m}C_n^{m-1} Cnm=mnm+1Cnm1(分子分母各抽出一项)
作用:递推求组合数

5.求组合数方法
n,m很小时,直接求都行。
n,m很大时,一般会对p取模(因为组合数太大了),且题目中p一般为素数(合数作取模运算容易被找出规律)

对p取模时:

1)n,m很小时可以用杨辉三角形递推求(即上式②)

2)预处理模p后的阶乘,然后用乘法逆元求亦可

3)n,m很大很大时,p很小可以用卢卡斯定理求(见卢卡斯定理

如果m不大的话,用上式③也可以

三.重要定理及思想

1.计数基本原理

计数最基本的两个原理:加法原理和乘法原理

①加法原理:

做一件事情有n个办法,每个办法有 p i p_i pi个方案实现,则共有 p 1 + p 2 + p 3 + ⋅ ⋅ ⋅ + p n p_1+p_2+p_3+\cdot\cdot\cdot +p_n p1+p2+p3++pn种方案

应用加法原理的关键是分类,每个类别间应该不重不漏,若有重复,可以使用容斥原理。

②容斥原理:

在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复。

例:班里有15个人喜欢数学,20个人喜欢语文,7个人既喜欢数学又喜欢语文,则班级的总人数应为:15+20-7=28.

若将喜欢数学的人记作集合A,喜欢语文的人记作集合B,总班级总人数 ∣ A ∪ B ∣ = ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ |A∪B|=|A|+|B|-|A∩B| AB=A+BAB

当计数的事物有A、B、C三类时,则三类事物的总个数应该为 ∣ A ∪ B ∪ C ∣ = ∣ A ∣ + ∣ B ∣ + ∣ C ∣ − ∣ A ∩ B ∣ − ∣ B ∩ C ∣ − ∣ A ∩ C ∣ + ∣ A ∩ B ∩ C ∣ |A∪B∪C|=|A|+|B|+|C|-|A∩B|-|B∩C|-|A∩C|+|A∩B∩C| ABC=A+B+CABBCAC+ABC

以此类推:当计数的事物有N类时,含奇数个集合的交集取正、含偶数个交集的集合取负,求和即得总数

③乘法原理:

做一件事情有n个步骤,每个步骤有 p i p_i pi个方案实现,则共有 p 1 ⋅ p 2 ⋅ p 3 ⋅ ⋅ ⋅ p n p_1\cdot p_2\cdot p_3\cdot\cdot\cdot p_n p1p2p3pn种方案

2.鸽巢原理: 又称抽屉原理,即:

桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面放不少于两个苹果。

应用:是组合数学中很重要的思想,但一般体现在思考的过程中。可以参考这两题:鸽巢原理

3.隔板法

n本相同的书放在k个不同的书架上
(n个相同的小球放在k个不同的盒子里)

①插入k-1个隔板

②将这k-1个隔板和书视为一样的元素,进行全排列,得到方案数 ( n + k − 1 ) ! (n+k-1)! (n+k1)!

③因为隔板,书都是相同的,所以方案数要除以 ( k − 1 ) ! (k-1)! (k1)! n ! n! n!

④即算得方案数 ( n + k − 1 ) ! ( k − 1 ) ! ⋅ n ! = C n + k − 1 n = C n + k − 1 k − 1 \frac{(n+k-1)!}{(k-1)!\cdot n!}=C_{n+k-1}^n=C_{n+k-1}^{k-1} (k1)!n!(n+k1)!=Cn+k1n=Cn+k1k1

更多相关知识可以参考这篇文章:隔板法

4.卢卡斯定理

详情见卢卡斯定理,模板加证明都有

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值