斯特林数
斯特林数
第二类斯特林数
我们在日常生活中遇到的,求把 \(n\) 个不同的苹果分为 \(m\) 组,且每组至少一个苹果的方案数,即为最经典的第二类斯特林数
第二类斯特林数 \({n \brace k}\),也可以记作 \(S(n, k)\),表示将 \(n\) 个两两不同的元素,划分为 \(k\) 个互不区分的非空子集的方案数。
递推式
边界是 \({n\brace 0} = [n = 0]\)。
证明:
我们在插入一个新的元素时,有两种方案:
-
将新元素单独放入一个子集,有 \({n - 1\brace k - 1}\) 种方案。
-
将新元素放入一个现有的非空子集,有 \(k{n - 1\brace k}\) 种方案。
根据加法原理,两个相加即可得到递推式。
通项公式
证明需要用到容斥:
设将 \(n\) 个两两不同的元素,划分到 \(i\) 个两两不同的集合(允许空集)的方案数为 \(G_{i}\),将 \(n\) 个两两不同的元素,划分到 \(i\) 个两两不同的非空集合(不允许空集)的方案数为 \(F_{i}\)。
显然:
根据二项式反演:
此外还有同一行或同一列的第二类斯特林数计算方法,可以自行到 OI Wiki 查询。
第一类斯特林数
第一类斯特林数 \({n\brack k}\),也可以记作 \(s(n,k)\),表示将 \(n\) 个两两不同的元素,划分为 \(k\) 个互不区分的非空轮换的方案数。
一个轮换就是一个首位相接的环形排列,如 \([A,B,C,D]\),并且我们认为 \([A,B,C,D] = [B,C,D,A] = [C,D,A,B] = [D,A,B,C]\),即,两个可以通过旋转而互相得到的轮换是等价的。
两个通过翻转能互相的得到的轮换不一定等价:\([A,B,C,D]\ne [D,C,B,A]\)。
递推式
边界是 \({n\brack 0} = [n = 0]\)。
证明:
我们在插入一个新的元素时,有两种方案:
-
将该新元素置于一个单独的轮换当中,共有 \({n - 1 \brack m - 1}\) 种方案。
-
将该元素置于任何一个现有的轮换中,共有 \((n - 1){n - 1\brack k}\) 种方案。
根据加法原理,两个相加即可得到递推式。
通项公式
没有。
习题
我 * 最简单的都是紫,还要用 NTT(?
鸽了。
参考文献
本文来自博客园,作者:北烛青澜,转载请注明原文链接:https://www.cnblogs.com/Multitree/p/17664044.html
The heart is higher than the sky, and life is thinner than paper.