各类数(二)—— 斯特林数

 

欢迎访问https://blog.csdn.net/lxt_Lucia~~

宇宙第一小仙女\(^o^)/~~萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗~~

 

简介

斯特林数是组合数学中的一个重要内容,有许多有用的性质。它由十八世纪的苏格兰数学家James Stirling首先发现并说明了它们的重要性。
斯特林数主要处理的是把N个不同的元素分成k个集合或环的个数问题。现在我们说的斯特林数可以指两类数,分为第一类斯特林数和第二类斯特林数,其中第一类斯特林数还分成有符号和无符号两种。

第一类斯特林数

这里仅讨论有符号的第一类斯特林数。
第一类斯特林数表示的是将n个不同元素分成k个不同的环的方案数。两个环不相同当且仅当这两个环不能通过旋转得到。表示方法为:

 

 

                                                                                 
考虑递推,把nn个不同元素分成k个不同的环有两种转移。第一种,有可能是n−1个不同元素分成k−1个不同的环,当前的第n个独立成一个元素。第二种可能是n−1个不同元素已经分好了k个不同的环,当前这个可以加进去。加在每个已有元素的逆时针方向(或顺时针方向,方向没有关系,只要统一即可)就不会出现重复,共有n−1种方法,所以:

                                                


这就是第一类斯特林数的递推式,也可以写成:

                                                     s(n,k)=s(n−1,k−1)+s(n−1,k)∗k

性质

组合数学中的定理暴力求解可行,但是不好玩。所以组合数学中很多定理的证明是通过构造一个问题,用两种不同的方法计算,由于是同一个问题,那么算出来的答案一定是相等的,从而证明等式,简称“算两次”。
第一类斯特林数有如下特殊性质:

                                                              

下面给出性质1,3,4,5的证明。

性质一

显然,我们把n个元素排列起来,有n!种可能,首尾相接即可得到一个环。这里面每种情况重复了n次,因为可以旋转n次,所以除以n,得到s(n,1)=(n−1)!.

性质三


这里给出数学归纳法的证明。
首先,s(2,2)=1∗1=1,符合定义。
下面通过递推式和性质一证明性质三对于n也成立:

                                              


得证!

性质四

同理可用数学归纳法强行计算。巧妙的方法我还没想到。

性质五

这里有一个巧妙地“算两次”方法。
首先构造一个问题,求n个数的所有排列。
首先用乘法原理直接得出结论,ans=n!。
我们知道,对于一个排列对应一个置换,即:

                                                    

把这个置换中的上下对应位置连边,可以得到许多的环。由于排列和置换是一一对应的,所以我们要求排列的个数,就是求用n个元素组成环的方案数,所以我们枚举环的个数:

                                                      


由于我们有s(n,0)=0,所以也可以写成:

                                                      

第二类斯特林数

第二类斯特林数表示把n个元素分成k个非空集合的方案数,集合内是无序的。这样,我们很容易得出转移:
分为两种情况。第一种情况,如果前n−1个元素组成了k−1个非空集合,那么当前元素自成一个集合。第二种情况,如果前n−1个元素组成了k个集合,那么当前的这个元素可以放进这k个集合中任意的一个。所以我们的到来递推方程:

                                                
也可以写成:

                                             

性质

通项公式:

                                
大概就是容斥原理,k枚举有多少个集合是空的,每种情况有种空集情况,n个元素可以放进非空的m−k个集合中。这样求出来的答案是有序的,所以我们除以m!使得其变为无序。

最后推送上斯特林公式求阶乘长度

lg(n!)=lg(2*pi*n)/2+n*lg(n/e)

e=2.71828182845

pi=3.1415926

可直接推得位数:res = lg(2*pi*n)/2+n*lg(n/e)+1

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值