【组合数学】一看到排列组合就头晕?更适合Oier的《组合数学知识简明大全》

本文的知识点有:加法原理、乘法原理、容斥原理、排列组合、圆排列、重排列、不相邻组合、错位排列(错排)、球盒问题、斯特林数、斐波那契数、卡特兰数。

配合了情景、应用、真题、大量的公式干货以及简明的证明,为了方便阅读。有些生僻冷门的没有加进来希望大家谅解。

一到四属于基础内容,大佬们可以从五开始看

用尽心血整理的、公式全部手打出来的一篇博客,希望大佬能支持一下QAQ

废话不多说我们这就开始——

一、加法原理

​ 加法原理的核心是分类。如果完成一件事情有 n n n类方法,每一类方法数分别为 A 1 , A 2 , … , A n A1,A2, … ,An A1,A2,,An,则完成这件事一共有 ∑ i = 1 n A i \sum_{i = 1}^{n}Ai i=1nAi种方法。

​ 需要注意的是,每一类方法都可以独立完成事件。

二、乘法原理

​ 乘法原理的核心是分步。如果完成一件事情有 n n n个步骤,每一个步骤数分别为 B 1 , B 2 , … , B n B1,B2, … ,Bn B1,B2,,Bn,则完成这件事一共有 ∏ j = 1 n B j \prod_{j = 1}^{n}B_j j=1nBj种方法。

加法分类,类类独立;乘法分步,步步相关。

三、容斥原理

​ 为使两个集合重叠部分不被重复计算,先列出包含的所有对象的元素,然后再把重复的元素排除出去,使得计算的结果既无遗漏又无重复,称为容斥原理。

​ 如果被计数的事物有 A 、 B 、 C A、B、C ABC三类,则
A ∪ B ∪ C = A + B + C − A ∩ B − B ∩ C − C ∩ A + A ∩ B ∩ C A\cup B\cup C=A+B+C-A\cap B-B\cap C-C\cap A+A\cap B \cap C ABC=A+B+CABBCCA+ABC

四、排列组合

n ! = ∏ i = 0 n − 1 ( n − i ) = n × ( n − 1 ) × ( n − 2 ) … × 2 × 1 n!=\prod_{i =0}^{n-1}(n-i)= n\times(n-1)\times(n-2)…\times2\times1 n!=i=0n1(ni)=n×(n1)×(n2)×2×1

1.排列与排列数

​ 排列的定义:从 n n n个不同元素中, 任取 m m m个元素, 按照⼀定的顺序排成⼀列, 叫做从 n n n个不同元素中取出 m m m个元素的⼀个排列

​ 排列数的定义:一个序列的有多少种给定的排列方法。

​ 排列数公式:
A n m = P n m = ∏ i = 0 m − 1 ( n − i ) = n ( n − 1 ) ( n − 2 ) … ( n − m + 1 ) = n ! ( n − m ) ! A_n^m = P_n^m =\prod_{i =0}^{m-1}(n-i)= n(n-1)(n-2)…(n-m+1) = \frac{n!}{(n-m)!} Anm=Pnm=i=0m1(ni)=n(n1)(n2)(nm+1)=(nm)!n!
​ 特别的,当 n = m n=m n=m 时,我们称之为全排列,i.e. 一个序列中所有元素的排列。

​ 全排列数公式:
A n n = P n n = = ∏ i = 0 n − 1 ( n − i ) = n × ( n − 1 ) × ( n − 2 ) … × 2 × 1 = n ! A^n_n = P^n_n ==\prod_{i =0}^{n-1}(n-i)= n\times(n-1)\times(n-2)…\times2\times1 =n! Ann=Pnn==i=0n1(ni)=n×(n1)×(n2)×2×1=n!

1.组合与组合数

​ 组合的定义:从 n n n个不同元素中, 任取 m m m个元素, 并成一组, 叫做从 n n n个不同元素中取出 m m m个元素的⼀个组合

​ 组合数的定义:一个序列的有多少种给定的组合方法。

​ 组合数公式:
C n m = A n m A m m = ∏ i = 0 m − 1 ( n − i ) ∏ j = 0 m − 1 ( m − j ) = n ( n − 1 ) ( n − 2 ) … ( n − m + 1 ) m ! = n ! m ! ( n − m ) ! C_n^m =\frac{A^m_n}{A^m_m}=\frac{\prod_{i =0}^{m-1}(n-i)}{\prod_{j =0}^{m-1}(m-j)}= \frac{n(n-1)(n-2)…(n-m+1)}{m!} = \frac{n!}{m!(n-m)!} Cnm=AmmAnm=j=0m1(mj)i=0m1(ni)=m!n(n1)(n2)(nm+1)=m!(nm)!n!

与顺序有关的为排列问题,与顺序无关的为组合问题。

五、特殊的排列组合

1.圆排列

意义:

​ 从 n n n 个元素的序列 A [ n ] = a 1 , a 2 , a 3 , . . . . . . , a n A[n] = { a_1, a_2, a_3, ......, a_n } A[n]=a1,a2,a3,......,an 中,取出 r r r 个元素排列成一个圆,求使得不同的圆排列的排列数,e.g.

	                      turn to        [1]
	[1][2][3][4][5][6]   =========>   [5]   [2]
      (n = 6, r = 5)                   [4] [3]   一种圆排列   

​ 如从 6 个元素的序列 A [ 6 ] = 1 , 2 , 3 , 4 , 5 , 6 A[6] = {1, 2, 3, 4, 5, 6} A[6]=1,2,3,4,5,6 中,取出 5 个元素排列成不同的圆,不同圆的数量即圆排列排列数。

公式:

​ 圆排列排列数公式为:
A n r r ( r , n ∈ N ∗ ; r ∈ [ 1 , n ] ) \frac{A_{n}^{r}}{r}(r,n\in N^*;r\in [1,n]) rAnr(r,nN;r[1,n])
​ 先将所有元素全排列,得公式的分子。

​ 但是我们发现,每次 r r r 个不同元素打头形成的序列、尽管线性观察时是不一样的。但变成圆排列时就变成了完全相同的重复情况i.e.

	[1][2][3][4][5]	 	           [1][2][3][4][5]
	[2][3][4][5][1]	  is same as   [1][2][3][4][5]
	[3][4][5][1][2]  <==========>  [1][2][3][4][5]
	[4][5][1][2][3]	 	           [1][2][3][4][5]
	[5][1][2][3][4]  	           [1][2][3][4][5]  这是重复的排列方式中的1/5

​ (上图左边矩阵中第一列是1 2 3 4 5哦)

​ 所以我们要除以不同元素打头形成的圆排列相同的序列数,也就是在分子的基础上除于 r r r

​ 特别地, n = r n = r n=ri.e. n n n 个元素全部用来圆排列时,圆排列公式可这样转化:
A n n n = n ! n = n × ( n − 1 ) × ( n − 2 ) × … × 1 n = ( n − 1 ) ! ( n ∈ N ∗ ) \frac{A_{n}^{n}}{n} = \frac{n!}{n} = \frac{n \times (n - 1) \times(n - 2)\times…\times1}{n} = (n - 1)!(n\in N^*) nAnn=nn!=nn×(n1)×(n2)××1=(n1)!(nN)

例题:
1.[***真题] 在 NOI 期间,主办单位为了欢迎来自各国的选手,举行了盛大的晚宴。在第十八桌,有5名大陆选手和5名港澳选手共同进膳。为了增进交流,他们决定相隔就坐,即每个大陆选手左右旁都是港澳选手,每个港澳选手左右旁都是大陆选手。那么,这一桌一共有多少种不同的就坐方案?

​ 注:如果在两个方案中,每个选手左右相邻的选手相同,则视为同一种方案。

​ 解析:定义座位如 A a B b C c D d E e A a B b C c D d E e AaBbCcDdEe ,其中大写字母所在位置坐大陆选手,小写字母所在位置坐港澳选手,先考虑大陆选手圆排列入座,排列方案为 5 ! 5 \frac{5 ! }{5} 55!,港澳选手再插空全排列,排列数乘上 5! 。

​ 答案:
5 ! 5 × 5 ! = 4 ! × 5 ! = 2880 \frac{5!}{5}\times5! = 4!\times5! = 2880 55!×5!=4!×5!=2880

2.[*****] 建议了解一下破环为列的算法,虽然与圆排列数没有啥大关系。

2.有重复元素的全排列

意义:

​ 请看一个特殊的序列: A [ 6 ] = 1 , 1 , 3 , 3 , 3 , 3 A[6] = {1, 1, 3, 3, 3, 3} A[6]=1,1,3,3,3,3 。把这个序列排成一排,有多少种排列方法。

​ 不难看出这个序列中有 2 个重复的元素 1,4 个重复的元素 3。

​ 从每个局部元素单独考虑很让人头大,不妨由整体到局部,先把这 6 个元素的全排列数求出,i.e.
( 4 + 2 ) ! = 6 ! (4 + 2)! = 6! (4+2)!=6!
​ 反思这么考虑的代价:我们考虑了整体序列中 6 个元素的全排列数,也就是无视了元素与元素之间的顺序关系,但 2 个 1 之间的排列顺序改变不会影响整个序列的排列数,同样 4 个 3 之间也是,所以要在之前的结果上、除以每组相同元素之间的全排列数i.e.
( 4 + 2 ) ! 4 ! × 2 ! = 6 × 5 × 4 × 3 × 2 × 1 2 × 1 × 4 × 3 × 2 × 1 = 15 \frac{(4+2)!}{4!\times2!} = \frac{6\times5\times4\times3\times2\times1}{2\times1\times4\times3\times2\times1} = 15 4!×2!(4+2)!=2×1×4×3×2×16×5×4×3×2×1=15

公式:

​ 拓展到一般,那么假设一个序列种有 k k k 组相同的元素,第 i i i 组相同的元素数量为 n i n_i ni,则有重复元素的全排列数 i.e.
( ∑ i = 1 k n i ) ! ∏ j = 1 k n j ! = ( n 1 + n 2 + n 3 + … + n k ) ! n 1 ! × n 2 ! × n 3 ! × … × n k ! ( k ∈ N ∗ ) \frac{(\sum_{i = 1}^{k}n_i)!}{\prod_{j = 1}^{k}n_j!}=\frac{(n_1+n_2+n_3+…+n_k)!}{n_1!\times n_2!\times n_3!\times …\times n_k!}(k\in N^*) j=1knj!(i=1kni)!=n1!×n2!×n3!××nk!(n1+n2+n3++nk)!(kN)

例题:
1.[*] 有3个相同的黄球、2个相同的蓝球、4个相同的白球排成一排,问:有多少种不同的排法?

( 3 + 2 + 4 ) ! ( 3 ! × 2 ! × 4 ! ) = 1260 \frac{(3+2+4)!}{(3!\times2!\times4!)}=1260 (3!×2!×4!)(3+2+4)!=1260

2.[****] 把两个红球、一个蓝球、一个白球放到10个编号不同的盒子中去,每个盒子最多放1个球,有多少种放法?

A 10 4 2 ! × 1 ! × 1 ! = 2520 \frac{A_{10}^{4}}{2!\times1!\times1!}=2520 2!×1!×1!A104=2520

3.[**真题] 将N个红球和M个黄球排成一行。例如:N=2,M=2可得到以下6种排法:
		红红黄黄 红黄红黄 红黄黄红 黄红红黄 黄红黄红 黄黄红红
	问题:当N=4,M=3时有多少种不同排法?(不用列出每种排法)

( 4 + 3 ) ! 4 ! × 3 ! = 35 \frac{(4+3)!}{4!\times3!} = 35 4!×3!(4+3)!=35

4.[*****真题] 由3个a,5个b和2个c构成的所有字符串中,包含子串“abc”的共有(    )个。   
	A. 40320   	 B. 39600    C. 840    D. 780    E. 60

​ 至少有1个 “ a b c ” “abc” abc的组合: 8 ! ( 1 ! × 2 ! × 4 ! × 1 ! ) = 840 \frac{8!}{(1!\times 2!\times4!\times1!)} = 840 (1!×2!×4!×1!)8!=840

​ 分子的 8 i.e. “ a b c , a , a , b , b , b , b , c ” “abc, a, a, b, b, b, b, c” abc,a,a,b,b,b,b,c,把 “ a b c ” “abc” abc捆绑在一起

​ 确定有2个 “ a b c ” “abc” abc的组合: 6 ! ( 2 ! × 1 ! × 3 ! × 0 ! ) = 60 \frac{6!}{(2!\times1!\times3!\times 0!)} = 60 (2!×1!×3!×0!)6!=60

​ 减去因排列顺序而重复的组合: 840 – 60 = 780 840 – 60 = 780 840–60=780

3.不相邻组合

意义:

​ 请继续看这样一个序列 A [ 6 ] = 1 , 2 , 3 , 4 , 5 , 6 A[6] = {1, 2, 3, 4, 5, 6} A[6]=1,2,3,4,5,6,我们要求从中取出 3 个元素组成一个组合,使得里面有 1 没有 2,有 2 没有 1 或 3,有 3 没有 2 或 4,有 4 没有 5 或 6,有 6 没有 5。这种有你没我有我没你不是你死就是我亡的组合叫做不相邻组合。而样例中的不相邻组合有 {1, 3, 5}、{1, 3, 6}、{1, 4, 6} 和 {2, 4, 6} 四种。

公式:

​ 由样例拓展出去,不相邻组合就是从一个有 n n n 个元素的序列中、取 r r r 个不相邻的数进行组合(不可重)。i.e. 使得所取任一组合中的任一元素 a i ≠ a i + 1 a_i \not= a_{i+1} ai=ai+1。其组合数为:
C n − r + 1 r ( r , n ∈ N ∗ ; r ∈ [ 1 , n ] ) C_{n-r+1}^{r}(r,n\in N^*;r\in [1,n]) Cnr+1r(r,nN;r[1,n])
​ 比较容易得出,请读者自行推导(只要分类讨论、一个隔一个列举就能找到规律)。

例题:
1.[**] 书架上有21本书,编号从1到21,从其中选4本,其中每两本的编号都不相邻的选法一共有多少种?

C 18 4 = 3060 C^{4}_{18} = 3060 C184=3060

2.[****] 7个同学围坐一圈,要选2个不相邻的作为代表,有多少种不同的选法?

C 6 2 − 1 = 14 C^2_6 - 1 = 14 C621=14

4.有重复元素的组合

意义:

​ 现在有 3 个相同的小球,把它们放到 2 个不同的盒子里,可以考虑板插法

​ 但是不要忘了,题目中没说不能有空盒子,所以我们要补上两个假球,当作真球来板插分组:

	球	|	球	|	球		假球		假球
	球	|	球		球	|	假球		假球
	球	|	球		球		假球	|	假球
	球		球	|	球	|	假球		假球
	球		球	|	球		假球	|	假球
	球		球		球	|	假球	|	假球

​ 于是答案就是 C 3 + 2 − 1 2 = C 4 2 = 6 C^{2}_{3+2-1} = C^2_4 = 6 C3+212=C42=6

公式:

​ 拓展为:从有 n n n 个不同的元素的序列中取 r r r 个的元素的组合数,允许序列中有重复元素,允许有空的组合:

​ 你还不会板插法嘛?公式呼之欲出:
C n + r − 1 r ( r , n ∈ N ∗ ; r ∈ [ 1 , n ] ) C^r_{n+r-1}(r,n\in N^*;r\in [1,n]) Cn+r1r(r,nN;r[1,n])

例题:

​ 样例当例题也够了。死记硬背公式的话注意与不相邻组合的区分,但是不建议死记硬背。

5.错位排列

意义:

​ 错位排列问题,又称伯努利-欧拉装错信封问题。

​ 摆在 z y h zyh zyh面前有编号是 1 、 2 、 … 、 n 1、2、… 、n 12n n n n 封寄给 s y y syy syy干爹的信,把它们装入编号为 1 、 2 、 … 、 n 1、2、… 、n 12n n n n 个信封,要求每封信和信封的编号不同,问有多少种装法?

公式:

​ 设 a 1 , a 2 , … , a n a_1, a_2, … , a_n a1,a2,,an A [ n ] A[n] A[n] 的一个全排列,若对于任意的 $ i\in [1, n]$ , 都有 a i ≠ A [ i ] a_i \not= A[i] ai=A[i],则称 ( a 1 , a 2 , … , a n ) (a_1, a_2, … , a_n) (a1,a2,,an) A [ n ] A[n] A[n] 的一个错位排列。

​ 一般用 D n Dn Dn 表示 A [ n ] A[n] A[n] 的错位排列的个数。

​ 推导很困难,我们不妨试试把前几种情况列出来哦

​ 当 n = 1 n = 1 n=1 时,显然没有错位装法,或者0种;

​ 当 n = 2 n = 2 n=2 时,有 (2, 1) 共1种装法;

​ 当 n = 3 n = 3 n=3 时,有 (2, 3, 1)、(3, 1, 2) 共2种装法;

​ 当 n = 4 n = 4 n=4 时,有 (2, 1, 4, 3)、(3, 1, 4, 2)、(4, 1, 2, 3)、(3, 4, 1, 2)、(2, 4, 1, 3)、(4, 3, 1, 2)、(4, 3, 2, 1)、(2, 3, 4, 1)、(3, 4, 2, 1) 共 9 种装法。

​ 错位排列前若干项的值为:0,1,2,9,44,265,…

要不……我先给出公式

​ 递推公式:
D ( x ) = { x ( x = 0 ∧ x = 1 ) ( x − 1 ) × [ D ( x − 1 ) + D ( x − 2 ) ] ( x ∈ N ∗ , x ≠ 0 ∨ x ≠ 1 ) D(x) = \begin{cases}x & (x = 0 \wedge x = 1)\\(x - 1)\times[D(x - 1)+D(x - 2)] & (x\in N^*,x \not=0 \vee x\not=1)\end{cases} D(x)={x(x1)×[D(x1)+D(x2)](x=0x=1)(xN,x=0x=1)
​ 通项公式:
D ( n ) = n ! × [ 1 2 ! − 1 3 ! + 1 4 ! − 1 5 ! + … + ( − 1 ) n 1 n ] = n ! × ∑ i = 2 n ( − 1 ) i i ( n ∈ N ∗ ) D(n) = n!\times[\frac{1}{2!}-\frac{1}{3!}+\frac{1}{4!}-\frac{1}{5!}+…+(-1)^n\frac{1}{n}] = n!\times\sum_{i = 2}^n\frac{(-1)^i}{i}(n\in N^*) D(n)=n!×[2!13!1+4!15!1++(1)nn1]=n!×i=2ni(1)i(nN)

推导:

​ 设 D ( n ) D(n) D(n) n n n 个不同元素的错排方案。

​ 第一部分:

n n n 先不动,把另外的 n − 1 n - 1 n1 个数错排,方案是: D ( n − 1 ) D(n - 1) D(n1),然后 n n n 和另外的 n − 1 n - 1 n1 个每一个交换,共有 ( n − 1 ) × D ( n − 1 ) n - 1) \times D(n - 1) n1)×D(n1)种方案。

​ 第二部分:

n n n 和其他的 n − 1 n - 1 n1 个之一交换,其余的 n − 2 n - 2 n2 个错排,共有 ( n − 1 ) ( n − 2 ) (n-1)(n-2) (n1)(n2)种方案。

​ 由加法原理得出递推公式

6.球盒问题

球 (数量为 k k k)盒 (数量为 n n n)盒是否可空公式
1相同不同 C n − 1 k − 1 C_{n - 1}^{k-1} Cn1k1
2相同不同 C n + k − 1 k − 1 C_{n +k- 1}^{k-1} Cn+k1k1
3相同相同$ S(n,k)$
4相同相同 S ( n + k , k ) S(n+k, k) S(n+k,k)
5不同相同 S ( n , k ) S(n,k) S(n,k)
6不同相同 ∑ i = 1 k S ( n , i ) \sum^k_{i=1}S(n,i) i=1kS(n,i)
7不同不同 S ( n , k ) × k ! S(n,k)\times k! S(n,k)×k!
8不同不同 k n k^n kn
  1. 球相同,盒不同,且盒子不能空

    等价于“正整数的有序拆分”。

    ​ 经典插板法,把 r r r个球排成一排,然后每隔一段在两个球之间插入一个插板,这样一排球就会变成有序(盒子不同)的几份。 n n n个球对应 ( n − 1 ) (n-1) n1个空隙, k k k个盒子对应 ( k − 1 ) (k-1) k1个插板,题目就变成从 ( n − 1 ) (n-1) n1个空隙中选 ( k − 1 ) (k-1) k1个位置插入插板,即 C n − 1 k − 1 C_{n - 1}^{k-1} Cn1k1

  2. 球相同,盒不同,且盒子可以空

    等价于“求方程 x 1 + x 2 + … + x k = n x_1+x_2+…+x_k=n x1+x2++xk=n的非负整数解”。

    ​ 类似1的做法,既然可以空,那么把每个盒子先补上一个球,题目就变成 ( n + k ) (n+k) (n+k)个球和 k k k个盒子,且盒子不能空的情况,即 C n + k − 1 k − 1 C_{n +k- 1}^{k-1} Cn+k1k1

  3. 球相同,盒相同,且盒子不能空

    等价于“正整数的无序拆分”,即正整数 n n n拆分成 k k k份(没有先后顺序)的方法。

    ​ 递推公式为: S ( n , k ) = S ( n − 1 , k − 1 ) + S ( n − k , k ) S(n,k) = S(n-1,k-1) + S(n-k,k) S(n,k)=S(n1,k1)+S(nk,k) (至少有1份是1,或者每一份数量都大于1)

    ​ 边界条件: S ( n , 1 ) = S ( n , n ) = 1 S(n,1)=S(n,n)=1 S(n,1)=S(n,n)=1,且当 k > n k>n k>n时, S ( n , k ) = 0 S(n,k)=0 S(n,k)=0

  4. 球相同,盒相同,且盒子可以空

    等价于“非负整数的拆分”,可以先把每个盒子放上一个球,再按照3中的情况处理。

    ​ 即计算 S ( n + k , k ) S(n+k, k) S(n+k,k)的值,或者计算 ∑ i = 1 k S ( n , i ) \sum_{i = 1}^k S(n,i) i=1kS(n,i)的值。

  5. 球不同,盒相同,且盒子不能空

    这是集合 n n n k k k部拆分问题。即将集合 n n n拆分成 k k k份,每份至少一个元素。

    规定:

    n ∈ [ 1 , k ) 时 n\in[1,k)时 n[1,k) S ( n , k ) = 0 S(n,k)=0 S(n,k)=0

    n ∈ [ 1 , ∞ ) n\in[1,\infty) n[1,)时, S ( n , 0 ) = S ( 0 , n ) = 0 S(n,0)=S(0,n)=0 S(n,0)=S(0,n)=0, 以及 S ( 0 , 0 ) = 0 S(0,0)=0 S(0,0)=0

    S ( n , k ) = S ( n − 1 , k − 1 ) + k × S ( n − 1 , k ) S(n,k)= S(n-1,k-1) + k\times S(n-1,k) S(n,k)=S(n1,k1)+k×S(n1,k) ( n , k ∈ N ) (n,k \in N) (n,kN)

  6. 球不同,盒相同,且盒子可以空

    集合n的至多被拆分成k个分部的分拆。

    公式: ∑ i = 1 k S ( n , i ) \sum_{i = 1}^k S(n,i) i=1kS(n,i)

  7. 球不同,盒不同,且盒子不能空

    这是集合n的k部有序拆分问题。

    公式: k ! × S ( n , k ) k!\times S(n,k) k!×S(n,k)

  8. 球不同,盒不同,且盒子可以空

    这是可重复排列问题。

    公式: k n k^n kn

六、特殊的递推式

1.斐波那契(Fibonacci)

​ 其实一点也不特殊,我最多送你一个递推一个通项
F ( n ) = { 1 ( n ∈ N ∗ , n ∈ ( − ∞ , 2 ] ) F ( n − 1 ) + F ( n − 2 ) ( n ∈ N ∗ , n ∈ [ 3 , + ∞ ) ) F(n)=\begin{cases} 1&(n\in N^*,n\in(-\infty,2])\\ F(n-1)+F(n-2)&(n\in N^*,n\in[3,+\infty)) \end{cases} F(n)={1F(n1)+F(n2)(nN,n(,2])(nN,n[3,+))

F ( n ) = ( 1 + 5 2 ) n − ( 1 − 5 2 ) n 5 ( n ∈ N ∗ ) F(n)=\frac{({\frac{1+\sqrt5}{2}})^n-({\frac{1-\sqrt5}{2}})^n}{\sqrt5} (n\in N^*) F(n)=5 (21+5 )n(215 )n(nN)

2.斯特林数(Stirling)

​ 这类数不是很常用,甚至BFS(Baidu First Search)也无法直接搜到斯特林数的前几项
在这里插入图片描述

第一类斯特林数

1
1 1
2 3 1
6 11 6 1
24 50 35 10 1
120 274 225 85 15 1
720 1764 1624 735 175 21 1
5040 13068 13132 6769 1960 322 28 1
40320 109584 118124 67284 22449 4536 546 36 1
362880 1026576 1172700 723680 269325 63273 9450 870 45 1
S ( n , m ) = { 0 ( n , m ∈ N ∗ ; m > n ) 1 ( n , m ∈ N ∗ ; m = 1 ∧ m = n ) S ( n − 1 , m − 1 ) + S ( n − 1 , m ) × ( n − 1 ) ( n , m ∈ N ∗ ; n , m ∈ ( 1 , + ∞ ) ) S(n,m)=\begin{cases} 0&(n,m\in N^*;m>n)\\ 1&(n,m\in N^*;m = 1 \wedge m = n)\\ S(n-1,m-1)+S(n-1,m)\times (n-1)&(n,m\in N^*;n,m\in (1,+ \infty ))\\ \end{cases} S(n,m)= 01S(n1,m1)+S(n1,m)×(n1)(n,mN;m>n)(n,mN;m=1m=n)(n,mN;n,m(1,+))
n n n个不同元素分成 m m m个不同的环的方案数(两个环不相同当且仅当这两个环不能通过旋转得到)

在这里插入图片描述

第二类斯特林数

1
1 1
1 3 1
1 7 6 1
1 15 25 10 1
1 31 90 65 15 1
1 63 301 350 140 21 1
1 127 966 1701 1050 266 28 1
1 255 3025 7770 6951 2646 462 36 1
1 511 9330 34105 42525 22827 5880 750 45 1
S ( n , m ) = { 0 ( n , m ∈ N ∗ ; m > n ) 1 ( n , m ∈ N ∗ ; m = 1 ∧ m = n ) m × S ( n − 1 , m ) + S ( n − 1 , m − 1 ) ( n , m ∈ N ∗ ; n , m ∈ ( 1 , + ∞ ) ) S(n,m)=\begin{cases} 0&(n,m\in N^*;m>n)\\ 1&(n,m\in N^*;m = 1 \wedge m = n)\\ m\times S(n-1,m)+S(n-1,m-1)&(n,m\in N^*;n,m\in (1,+ \infty ))\\ \end{cases} S(n,m)= 01m×S(n1,m)+S(n1,m1)(n,mN;m>n)(n,mN;m=1m=n)(n,mN;n,m(1,+))
N N N个不同元素分成 m m m个不同的集合的方案数(集合非空)

情景一、放置小球

n n n个有区别的球放到 m m m个相同的盒子中,要求无一空盒,其不同的方案数用 S ( n , m ) S(n,m) S(n,m)表示,称为第二类 S t i r l i n g Stirling Stirling数。

​ 设有 n n n个不同的球,分别用 b 1 , b 2 , … , b n b1,b2,…,bn b1,b2,,bn表示。

​ 从中取出一个球 b n bn bn b n bn bn的放法有以下两种:

  1. b n bn bn独自占一个盒子;那么剩下的球只能放在 m − 1 m-1 m1个盒子中,方案数为 $S(n-1,m-1) $

  2. b n bn bn与别的球共占一个盒子;那么可以事先将 b 1 , b 2 , … , b n − 1 b1,b2,…,bn-1 b1,b2,,bn1 n − 1 n-1 n1个球放入 m m m个盒 子中,然后再将球 b n bn bn可以放入其中一个盒子中

    方案数为: m ∗ S ( n − 1 , m ) S ( n , m ) = m ∗ S ( n − 1 , m ) + S ( n − 1 , m − 1 ) ( n > 1 , m > 1 ) m*S(n-1,m) S(n,m)=m*S(n-1,m)+S(n-1,m-1) (n>1,m>1) mS(n1,m)S(n,m)=mS(n1,m)+S(n1,m1)(n>1,m>1)

    边界条件: S 2 ( n , 1 ) = 1 ; S 2 ( n , n ) = 1 ; S 2 ( n , k ) = 0 ( k > n ) S2(n,1)=1;S2(n,n)=1;S2(n,k)=0(k>n) S2(n,1)=1;S2(n,n)=1;S2(n,k)=0(k>n)

    划分方案数 i . e . i.e. i.e.第二类斯特林数

情景二:集合划分问题。

S S S是一个包含 n n n个元素的集合, S = b 1 , b 2 , b 3 , … , b n S={b1,b2,b3,…,bn} S=b1,b2,b3,,bn,现需要将 S S S集合划分为 m m m个满足如下条件的集合

S 1 , S 2 , … , S m S1,S2, …,Sm S1,S2,,Sm; S i ≠ ∅ Si\not=\emptyset Si=;  S i ∩ S j = ∅ Si\cap Sj=\emptyset SiSj=; S 1 ∪ S 2 ∪ … ∪ S m = S ; ( 1 ≤ i , j ≥ m ) S1∪S2∪…∪Sm=S; (1\leq i , j\geq m) S1S2Sm=S;(1i,jm)

​ 则称 S 1 , S 2 , … , S m S1,S2, …,Sm S1,S2,,Sm S S S的一个划分。

1、输入n和m的值,输出不同的划分方案数。 要求:输入数据有一行,第一个数是n,第二个数m。 
	样例: 输入:4 3  输出:6 

​ 划分方案数 i . e . i.e. i.e.第二类斯特林数,其实也就是第二类斯特林数的定义啦~

3.卡特兰数(Catalan)

重头戏来了,或者说正片开始

前几项为(从第0项开始):1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, …

首先卡特兰数的递推式就有4个:

两个递推公式:

递推式一:
h [ n ] = ∑ i = 0 n h [ i ] × h [ n − 1 ] = h [ 0 ] × h [ n − 1 ] + . . . + h [ n − i ] × h [ 0 ] ( n ∈ N ∗ ; n ≥ 2 ) h[n]=\sum_{i = 0}^nh[i]\times h[n-1] = h[0]\times h[n−1]+...+h[n−i]\times h[0](n\in N^*;n≥2) h[n]=i=0nh[i]×h[n1]=h[0]×h[n1]+...+h[ni]×h[0](nN;n2)
递推式二:
h [ n + 1 ] = 2 ( 2 n + 1 ) n + 2 × h [ n ] ( n ∈ N ∗ ; n ≥ 2 ) h[n+1]=\frac{2(2n+1)}{n+2}\times h[n](n\in N^*;n\geq 2) h[n+1]=n+22(2n+1)×h[n](nN;n2)
其中: h [ 1 ] = h [ 0 ] = 0 h[1]=h[0]=0 h[1]=h[0]=0

两个组合数公式或者说通项公式:

组合公式一:
h ( n ) = 1 ( n + 1 ) ∑ i = 0 n ( C n i ) 2 ( n ∈ N ) h(n)=\frac{1}{(n+1)}\sum_{i = 0}^{n}(C_n^i)^2 (n\in N) h(n)=(n+1)1i=0n(Cni)2(nN)
组合公式二:
h ( n ) = 1 n + 1 C 2 n n = C 2 n n − C 2 n n − 1 ( n ∈ N ) h(n)=\frac{1}{n+1}C^n_{2n}=C_{2n}^{n} - C_{2n}^{n-1} (n\in N) h(n)=n+11C2nn=C2nnC2nn1(nN)

情景一、n个元素序列的进出栈方案数(h(n))

​ 一个进栈序列n,有多少个不同的出栈序列?P1044 [NOIP2003 普及组] 栈

​ 比如序列1 2 3 4,共有1 2 3 4,1 2 4 3,1 3 2 4,1 3 4 2,1 4 3 2

img

情景二、几何意义

​ 从原点(0,0)出发,每次向x轴或者y轴正方向移动1个单位,直到到达(n,n)点,且在移动过程中不越过第一象限平分线的移动方案总数。

​ 在n*n的格子中,只在下三角行走,每次横或竖走一格,有多少中走法?其实向右走相当于进栈,向左走相当于出栈,本质就是n个数出栈次序的问题,所以答案就是卡特兰数。

神奇的卡特兰数

img

情景三、凸n边形的三角形划分方案数(h(n-2))

在这里插入图片描述

​ 一个凸的n边形,用直线连接其中两个顶点使之分成多个三角形,每条直线不能相交,问一共有多少种划分方案。

​ 我们不妨任取三个点 P 1 、 P k 、 P n P_1、P_k、P_n P1PkPn,以这三个点为基准三角形。

​ 区域①是一个凸 k k k边形,区域②是一个凸 n − k + 1 n-k+1 nk+1边形, 区域①的拆分方案总数是 f ( k ) f(k) f(k); 区域②的拆分方案数为 f ( n − k + 1 ) f(n-k+1) f(nk+1); 故包含 △ P 1 P k P n △P_1P_kP_n P1PkPn n n n边形的拆分方案数为 f ( k ) ∗ f ( n − k + 1 ) f(k)* f(n-k+1) f(k)f(nk+1)

​ 那么总方案数就是
F ( n ) = ∑ i = 2 n − 1 f ( i ) × f ( n − i + 1 ) F(n)=\sum_{i=2}^{n-1}f(i)\times f(n-i+1) F(n)=i=2n1f(i)×f(ni+1)
​ 而将一个凸 n + 2 n+2 n+2边形区域分成三角形区域的方法数就是卡特兰数

情景四、n节点能构成的二叉树的个数(h(n))

​ n个节点所能构成的满二叉树的个数也符合卡特兰数。

​ 向左记为+1,向右记为−1,按照向左优先的原则,从根节点开始遍历。例如第一个图记为 + 1 , + 1 , + 1 , − 1 , − 1 , − 1 +1,+1,+1,−1,−1,−1 +1,+1,+1,1,1,1。这种形式的遍历都符合卡特兰数的规则。

​ 或者可以这样考虑根肯定会占用一个结点,那么剩余的n-1个结点可以有如下的分配方式, T ( 0 , n − 1 ) , T ( 1 , n − 2 ) , . . . , T ( n − 1 , 0 ) T(0, n-1),T(1, n-2),...,T(n-1, 0) T(0,n1),T(1,n2),...,T(n1,0),设 T ( i , j ) T(i, j) T(i,j)表示根的左子树含i个结点,右子树含j个结点。

设问题的解为 f ( n ) f(n) f(n),那么 f ( n ) = f ( 0 ) ∗ f ( n − 1 ) + f ( 1 ) ∗ f ( n − 2 ) + . . . . . . . + f ( n − 2 ) ∗ f ( 1 ) + f ( n − 1 ) ∗ f ( 0 ) f(n) = f(0)*f(n-1) + f(1)*f(n-2) + .......+ f(n-2)*f(1) + f(n-1)*f(0) f(n)=f(0)f(n1)+f(1)f(n2)+.......+f(n2)f(1)+f(n1)f(0)

​ 卡特兰推导公式呗。

img

情景五、n对括号的合法匹配 ( h ( n ) ) (h(n)) h(n)

​ 当前有n对括号,请问有多少种合法的排列方式。

​ 比如n=3时,所有合法的括号表达式有 ((())), (())(), ()(()), ()()(), (()()), 共5个。

n n n对括号相当于有 2 n 2n 2n个符号, n n n个左括号、 n n n个右括号,可以设问题的解为 f ( 2 n ) f(2n) f(2n)

f ( 2 n ) f(2n) f(2n)可以转化如下的递推式 f ( 2 n ) = f ( 0 ) ∗ f ( 2 n − 2 ) + f ( 2 ) ∗ f ( 2 n − 4 ) + . . . + f ( 2 n − 4 ) ∗ f ( 2 ) + f ( 2 n − 2 ) ∗ f ( 0 ) f(2n) = f(0)*f(2n-2) + f(2)*f(2n - 4) + ... + f(2n - 4)*f(2) + f(2n-2)*f(0) f(2n)=f(0)f(2n2)+f(2)f(2n4)+...+f(2n4)f(2)+f(2n2)f(0)

再不会要打屁股了

情景六、 n个数连乘括号化的方案数 ( h ( n − 1 ) ) (h(n-1)) h(n1)

P = A 1 × A 2 × A 3 × A 4 × … × A n P=A_1\times A_2\times A_3\times A_4\times …\times A_n P=A1×A2×A3×A4××An

可以通过乘法结合律给这个式子由繁而简地括号化。分成 ( A 1 ) × ( A 2 × A 3 . . . . . A n ) (A_1)×(A_2×A_3.....A_n) (A1)×(A2×A3.....An),然后再对 ( A 1 ) (A_1) (A1) ( A 2 × A 3 . . . . . A n ) (A_2×A_3.....A_n) (A2×A3.....An)分别括号化。分成 ( A 1 × A 2 ) × ( A 3 . . . . . A n ) (A_1×A_2)×(A_3.....A_n) (A1×A2)×(A3.....An),然后再对 ( A 1 × A 2 ) (A_1×A_2) (A1×A2) ( A 3 . . . . . A n ) (A_3.....A_n) (A3.....An)括号化

$ f(n) = f(1)*f(n-1) + f(2)*f(n-2) + f(3)*f(n-3) + f(n-1)*f(1) 。 。 f(1)*f(n-1) 表示分成 表示分成 表示分成(A_1)×(A_2×A_3…A_n)$两部分,然后分别括号化。

情景七、在圆上选择 2 n 2n 2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数 ( h ( n ) ) (h(n)) h(n)

​ 以其中一个点为基点,设其编号为 0 0 0,然后按顺时针方向将其他点依次编号。那么与编号为 0 0 0相连点的编号一定是奇数,否则,这两个编号间含有奇数个点,势必会有个点被孤立,即在一条线段的两侧分别有一个孤立点,从而导致两线段相交。

​ 设选中的基点为 A A A,与它连接的点为 B B B,那么 A A A B B B将所有点分成两个部分,再对这两部分求解即可。

​ 设问题的解 f ( n ) f(n) f(n),那么 f ( n ) = f ( 0 ) ∗ f ( n − 2 ) + f ( 2 ) ∗ f ( n − 4 ) + f ( 4 ) ∗ f ( n − 6 ) + . . . + f ( n − 4 ) ∗ f ( 2 ) + f ( n − 2 ) ∗ f ( 0 ) f(n) = f(0)*f(n-2) + f(2)*f(n-4) + f(4)*f(n-6) + ...+f(n-4)*f(2) + f(n-2)*f(0) f(n)=f(0)f(n2)+f(2)f(n4)+f(4)f(n6)+...+f(n4)f(2)+f(n2)f(0)。熟悉的配方。

情景八、n个长方形填充一个高度为n的阶梯状图形的方法个数?

​ 卡特兰数,不推了。

神奇的卡特兰数

送一道真题作为送别

【NOIP2018提高组初赛第八题】关于 C a t a l a n Catalan Catalan C n = ( 2 n ) ! ( n + 1 ) ! n ! C_n = \frac{(2n)!}{(n + 1)!n !} Cn=(n+1)!n!(2n)!,下列说法中错误的是( A A A )。

A A A. C n C_n Cn 表示有 n + 1 n + 1 n+1 个结点的不同形态的二叉树的个数。

B B B. C n C_n Cn 表示含 n n n 对括号的合法括号序列的个数。

C C C. C n C_n Cn 表示长度为 n n n 的入栈序列对应的合法出栈序列个数。

D D D. C n C_n Cn 表示通过连接顶点而将 n + 2 n +2 n+2 边的凸多边形分成三角形的方法个数。

解析:只要往上翻一下,发现 A A A中其实应该是是 n n n个节点。

结束

参考:

https://www.luogu.com.cn/problem/P1720

https://www.luogu.com.cn/problem/solution/P8143

https://www.cnblogs.com/owenyu/p/6724661.html

https://www.luogu.com.cn/problem/solution/P1044

https://baike.baidu.com/item/%E6%96%AF%E7%89%B9%E6%9E%97%E6%95%B0/4938529?fr=aladdin

https://blog.csdn.net/chenlong_cxy/article/details/113613203

http://t.zoukankan.com/Staceyacm-p-10781754.html

https://blog.csdn.net/doc_sgl/article/details/8880468?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-10-8880468-blog-88906534.pc_relevant_multi_platform_featuressortv2dupreplace&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-10-8880468-blog-88906534.pc_relevant_multi_platform_featuressortv2dupreplace&utm_relevant_index=16

https://ti.luogu.com.cn/problemset/1029

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值