斯特林数。

136 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

第一类斯特林数

第一类斯特林数s1s_1(n,m)表示的是将n个不同的元素构成m个圆排列的数目。 考虑递推,可以将s1s_1(n,m)分为两种情况:

1.某一个元素单独构成一个圆,其它的n-1个元素构成m-1个圆,则这种情况下的数目为:n*s1s_1(n-1,m-1)。 2.某一个元素和至少1个其它元素构成一个圆,将n-1个元素组成m个圆,再将剩下的一个元素放入任何一个圆里,则这种情况下的数目为:(n-1)*s1s_1(n-1,m)

所以:s1(n,m)=ns1(n1,m1)+(n1)s1(n1,m)s_1(n,m)=n*s_1(n-1,m-1)+(n-1)*s_1(n-1,m) 以上式子用递归或者循环可以得到答案。

第二类斯特林数

第二类斯特林数s2(n,m)s_2(n,m)表示的是将n个不同的元素划分为m个集合的数目。 同样考虑递推,可以分为两种情况:

1.将某一个元素单独放在一个集合中,其余的n-1个元素构成m-1个集合,即n-1个元素组成m-1个集合,这种情况的数目为:s2(n1,m1)s_2(n-1,m-1)。 2.将某一个元素和至少一个元素放在同一个集合里,可以看作是将其余n-1个元素划分为m个集合,然后将剩下的1个元素加入任意一个集合,这样的数目有:ms2(n1,m)m*s_2(n-1,m)种。

所以:s2(n,m)=s2(n1,m1)+ms2(n1,m)s_2(n,m)=s_2(n-1,m-1)+m*s_2(n-1,m)种。