本文的知识点有:加法原理、乘法原理、容斥原理、排列组合、圆排列、重排列、不相邻组合、错位排列(错排)、球盒问题、斯特林数、斐波那契数、卡特兰数。
配合了情景、应用、真题、大量的公式干货以及简明的证明,为了方便阅读。有些生僻冷门的没有加进来希望大家谅解。
一到四属于基础内容,大佬们可以从五开始看
用尽心血整理的、公式全部手打出来的一篇博客,希望大佬能支持一下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
A、B、C三类,则
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
A∪B∪C=A+B+C−A∩B−B∩C−C∩A+A∩B∩C
四、排列组合
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=0∏n−1(n−i)=n×(n−1)×(n−2)…×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=0∏m−1(n−i)=n(n−1)(n−2)…(n−m+1)=(n−m)!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=0∏n−1(n−i)=n×(n−1)×(n−2)…×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=0m−1(m−j)∏i=0m−1(n−i)=m!n(n−1)(n−2)…(n−m+1)=m!(n−m)!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,n∈N∗;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=r 时,i.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×(n−1)×(n−2)×…×1=(n−1)!(n∈N∗)
例题:
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)!(k∈N∗)
例题:
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])
Cn−r+1r(r,n∈N∗;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 C62−1=14
4.有重复元素的组合
意义:
现在有 3 个相同的小球,把它们放到 2 个不同的盒子里,可以考虑板插法。
但是不要忘了,题目中没说不能有空盒子,所以我们要补上两个假球,当作真球来板插分组:
球 | 球 | 球 假球 假球
球 | 球 球 | 假球 假球
球 | 球 球 假球 | 假球
球 球 | 球 | 假球 假球
球 球 | 球 假球 | 假球
球 球 球 | 假球 | 假球
于是答案就是 C 3 + 2 − 1 2 = C 4 2 = 6 C^{2}_{3+2-1} = C^2_4 = 6 C3+2−12=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+r−1r(r,n∈N∗;r∈[1,n])
例题:
样例当例题也够了。死记硬背公式的话注意与不相邻组合的区分,但是不建议死记硬背。
5.错位排列
意义:
错位排列问题,又称伯努利-欧拉装错信封问题。
摆在 z y h zyh zyh面前有编号是 1 、 2 、 … 、 n 1、2、… 、n 1、2、…、n 的 n n n 封寄给 s y y syy syy干爹的信,把它们装入编号为 1 、 2 、 … 、 n 1、2、… 、n 1、2、…、n 的 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(x−1)×[D(x−1)+D(x−2)](x=0∧x=1)(x∈N∗,x=0∨x=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!1−3!1+4!1−5!1+…+(−1)nn1]=n!×i=2∑ni(−1)i(n∈N∗)
推导:
设 D ( n ) D(n) D(n) 为 n n n 个不同元素的错排方案。
第一部分:
n n n 先不动,把另外的 n − 1 n - 1 n−1 个数错排,方案是: D ( n − 1 ) D(n - 1) D(n−1),然后 n n n 和另外的 n − 1 n - 1 n−1 个每一个交换,共有 ( n − 1 ) × D ( n − 1 ) n - 1) \times D(n - 1) n−1)×D(n−1)种方案。
第二部分:
n n n 和其他的 n − 1 n - 1 n−1 个之一交换,其余的 n − 2 n - 2 n−2 个错排,共有 ( n − 1 ) ( n − 2 ) (n-1)(n-2) (n−1)(n−2)种方案。
由加法原理得出递推公式
6.球盒问题
球 (数量为 k k k) | 盒 (数量为 n n n) | 盒是否可空 | 公式 | |
---|---|---|---|---|
1 | 相同 | 不同 | 否 | C n − 1 k − 1 C_{n - 1}^{k-1} Cn−1k−1 |
2 | 相同 | 不同 | 是 | C n + k − 1 k − 1 C_{n +k- 1}^{k-1} Cn+k−1k−1 |
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 |
-
球相同,盒不同,且盒子不能空
等价于“正整数的有序拆分”。
经典插板法,把 r r r个球排成一排,然后每隔一段在两个球之间插入一个插板,这样一排球就会变成有序(盒子不同)的几份。 n n n个球对应 ( n − 1 ) (n-1) (n−1)个空隙, k k k个盒子对应 ( k − 1 ) (k-1) (k−1)个插板,题目就变成从 ( n − 1 ) (n-1) (n−1)个空隙中选 ( k − 1 ) (k-1) (k−1)个位置插入插板,即 C n − 1 k − 1 C_{n - 1}^{k-1} Cn−1k−1。
-
球相同,盒不同,且盒子可以空
等价于“求方程 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+k−1k−1。
-
球相同,盒相同,且盒子不能空
等价于“正整数的无序拆分”,即正整数 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(n−1,k−1)+S(n−k,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。
-
球相同,盒相同,且盒子可以空
等价于“非负整数的拆分”,可以先把每个盒子放上一个球,再按照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)的值。
-
球不同,盒相同,且盒子不能空
这是集合 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(n−1,k−1)+k×S(n−1,k) ( n , k ∈ N ) (n,k \in N) (n,k∈N)
-
球不同,盒相同,且盒子可以空
集合n的至多被拆分成k个分部的分拆。
公式: ∑ i = 1 k S ( n , i ) \sum_{i = 1}^k S(n,i) ∑i=1kS(n,i)
-
球不同,盒不同,且盒子不能空
这是集合n的k部有序拆分问题。
公式: k ! × S ( n , k ) k!\times S(n,k) k!×S(n,k)
-
球不同,盒不同,且盒子可以空
这是可重复排列问题。
公式: 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(n−1)+F(n−2)(n∈N∗,n∈(−∞,2])(n∈N∗,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−(21−5)n(n∈N∗)
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(n−1,m−1)+S(n−1,m)×(n−1)(n,m∈N∗;m>n)(n,m∈N∗;m=1∧m=n)(n,m∈N∗;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(n−1,m)+S(n−1,m−1)(n,m∈N∗;m>n)(n,m∈N∗;m=1∧m=n)(n,m∈N∗;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的放法有以下两种:
-
b n bn bn独自占一个盒子;那么剩下的球只能放在 m − 1 m-1 m−1个盒子中,方案数为 $S(n-1,m-1) $
-
b n bn bn与别的球共占一个盒子;那么可以事先将 b 1 , b 2 , … , b n − 1 b1,b2,…,bn-1 b1,b2,…,bn−1这 n − 1 n-1 n−1个球放入 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) m∗S(n−1,m)S(n,m)=m∗S(n−1,m)+S(n−1,m−1)(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 Si∩Sj=∅; S 1 ∪ S 2 ∪ … ∪ S m = S ; ( 1 ≤ i , j ≥ m ) S1∪S2∪…∪Sm=S; (1\leq i , j\geq m) S1∪S2∪…∪Sm=S;(1≤i,j≥m)
则称 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=0∑nh[i]×h[n−1]=h[0]×h[n−1]+...+h[n−i]×h[0](n∈N∗;n≥2)
递推式二:
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](n∈N∗;n≥2)
其中:
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=0∑n(Cni)2(n∈N)
组合公式二:
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=C2nn−C2nn−1(n∈N)
情景一、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
情景二、几何意义
从原点(0,0)出发,每次向x轴或者y轴正方向移动1个单位,直到到达(n,n)点,且在移动过程中不越过第一象限平分线的移动方案总数。
在n*n的格子中,只在下三角行走,每次横或竖走一格,有多少中走法?其实向右走相当于进栈,向左走相当于出栈,本质就是n个数出栈次序的问题,所以答案就是卡特兰数。
情景三、凸n边形的三角形划分方案数(h(n-2))
一个凸的n边形,用直线连接其中两个顶点使之分成多个三角形,每条直线不能相交,问一共有多少种划分方案。
我们不妨任取三个点 P 1 、 P k 、 P n P_1、P_k、P_n P1、Pk、Pn,以这三个点为基准三角形。
区域①是一个凸 k k k边形,区域②是一个凸 n − k + 1 n-k+1 n−k+1边形, 区域①的拆分方案总数是 f ( k ) f(k) f(k); 区域②的拆分方案数为 f ( n − k + 1 ) f(n-k+1) f(n−k+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(n−k+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=2∑n−1f(i)×f(n−i+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,n−1),T(1,n−2),...,T(n−1,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(n−1)+f(1)∗f(n−2)+.......+f(n−2)∗f(1)+f(n−1)∗f(0)。
卡特兰推导公式呗。
情景五、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(2n−2)+f(2)∗f(2n−4)+...+f(2n−4)∗f(2)+f(2n−2)∗f(0)。
再不会要打屁股了
情景六、 n个数连乘括号化的方案数 ( h ( n − 1 ) ) (h(n-1)) (h(n−1))
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(n−2)+f(2)∗f(n−4)+f(4)∗f(n−6)+...+f(n−4)∗f(2)+f(n−2)∗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