数学全部都去4吧!
1.欧拉错排
题目背景:有n个小球,编号分别是1−>n,要求把小球放在编号为1−>的盒子中且小球编号与盒子编号不同(每个盒子各放一个)
递推式:f[n]=(n−1)×(f[n−1]+f[n−2])
推导过程:
在考虑放第n个数时,考虑两种情况
<1>前面的数全部放错,可以拿第n个数任意和前面的数交换,情况数为(n−1)×f[n−1]<2>前面的数恰有一个没放错,只能拿第n个与未错数交换,又因为每个数都能成为未错数,情况数为(n−1)×f[n−2]综上所述,f[n]=(n−1)×f[n−1]+(n−1)×f[n−2]=(n−1)×(f[n−1]+f[n−2])
边界情况:f[0]=1,f[1]=0,具体为什么是这样呢
f[0]=1,既没有盒子也没有球,这就是一种情况(其实这个理解挺玄幻的)f[1]=0,只有一个盒子和一个球,球一只能放在盒一里,不存在满足条件的解
2.Catalan数
题目背景:将n个0和n个1排成一个序列,满足任意前缀中0的数量不小于1的数量
封闭形式:Catn=C2nn−C2nn−1
递推式:Catn=n+14n−2Catn−1=∑p=1nCatp−1×Catn−p,Cat1=1
推导过程:
<1>不受限制的排列数:C2nn
对于任意一个不合法的排列S,S中存在一个最靠前的位置2p+1∈[1,2n],使得S中有p个0,p+1个1
我们从2p+2开始,将后面序列中的01相互交换,这样,我们得到了一个长度为2n的排列,并且该排列中有n−1个0,n+1个1,即任意一个非法的排列S都可以与一个n−1个0,n+1个1得到的排列对应
反过来,任意一个n−1个0,n+1个1得到的排列,我们找到最小的位置2p+1,满足该位置处第一次出现1的个数多余0的个数(该位置一定存在),然后将2p+2到2n位置上的01相互交换,这样,我们得到了一个长度为2n,n个0,n个1的排列,故任意一个n−1个0,n+1个1得到的排列,都对应了一种n个0,n个1的排列,且该排列满足某个位置1出现的个数比0出现的个数多
由以上两点可知,这两种排列一一对应,故非法的排列数量为C2nn−1,容斥便可得到封闭式
将封闭式变形合并即可得到递推式Catn=n+14n−2Catn−1
<2>对于任意一个合法的排列,一定存在某个最靠前的位置2p,满足到该位置为止,0出现的次数刚好等于1出现的次数
从2p+1−>2n,始终满足0的个数不少于1的个数,所以这部分的排列数依然是卡特兰数
从1−>2p呢?
因为直到2p才满足0的个数和1的个数相等,又因为2p处肯定为1, 这意味这1−>2p−1始终满足0的个数多余1的个数,去掉第一个位置的0,从 2−>2p−1, 始终满足0的个数大于等于1的个数,所以我们去掉头部的0,2p处的1,中间的部分就是一个满足卡特兰数的排列,
所以,当2p是第一个0,1个数相等的位置时,方案数为Catp−1×Catn−p
因为1≤p≤n,所以Catn=∑p=1nCatp−1×Catn−p
3.Stirling数
斯特林数分为两类
<1>第一类斯特林数
题目背景:把n个互不相同的小球构成r个圆排列
递推式:Stirn=(n−1)×Stirn−1×Stir−1n−1
推导过程:在考虑Stirn(n个球构成r个圆排列)时,考虑两种情况
如果将第n个数单独构成一个圆排列,则方案数就变为了Stir−1n−1
否则考虑将第n个数放在已构好的圆排列中,即Stirn−1
因为是圆排列,只关心相对位置,所以有n−1种可能(可以想象成把n和另一个数合并得到一个新数),方案数就是(n−1)×Stirn−1
由乘法原理就可算得递推式
边界情况:Stinn=1,恰好每个圆内放一个数才满足条件
Stin0=0,至少要一个圆放数才能满足条件
<2>第二类斯特林数
题目背景:把n个互不相同的小球放进r个相同的盒子,每个盒子至少一个球
递推式:Stirn=r×Stirn−1×Stir−1n−1
推导过程:第二类斯特林数和第一类很像,这里不过多赘述
唯一的区别在于在第二类斯特林数中,元素在哪些集合并不重要,唯一重要的是各集合里装的是什么,而不管哪个集合装了什么
所以我们的选择就变成了r种每个盒子中讨论放入