[学习笔记]浅析 第二类斯特林(Stirling)数 的妙用

编程入门 行业动态 更新时间:2024-10-23 19:25:25

[学习笔记]浅析 第二类<a href=https://www.elefans.com/category/jswz/34/1763109.html style=斯特林(Stirling)数 的妙用"/>

[学习笔记]浅析 第二类斯特林(Stirling)数 的妙用

一、概念及递推

第二类斯特林数:把 n n 个元素分成 m'>m非空无序集合的方案数,记作

{nm} { n m }
递推式:考察第 n n 个元素是否单独属于一个集合。
如果单独属于一个集合,那么剩下的 n&#x2212;1'>n1 个元素有 {n−1m−1} { n − 1 m − 1 } 中划分方法。
如果不单独属于一个集合,那么剩下的 n−1 n − 1 个元素有 {n−1m} { n − 1 m } 种划分方法,第 n n 个元素可以插入这 m'>m 个集合中的任一。
所以得出第二类斯特林数的递推式:
{nm}={n−1m−1}+m×{n−1m} { n m } = { n − 1 m − 1 } + m × { n − 1 m }
边界 {00}=1 { 0 0 } = 1

二、通项公式

可以用容斥的方法求第二类斯特林数。
先考虑无序转有序,设 T(n,m) T ( n , m ) 表示把 n n 个元素划分成 m'>m 个非空有序集合的方案数。
注意这里「有序」的概念:集合的顺序有序,而集合内的元素无序。
如 {1,3}{2,4,5} { 1 , 3 } { 2 , 4 , 5 } 和 {3,1}{5,4,2} { 3 , 1 } { 5 , 4 , 2 } 是同一种方案,
而 {1,3}{2,4,5} { 1 , 3 } { 2 , 4 , 5 } 和 {2,4,5}{1,3} { 2 , 4 , 5 } { 1 , 3 } 不是同一方案。
这时候有:

{nm}=T(n,m)m! { n m } = T ( n , m ) m !
还是不 好求,考虑能否去掉「非空」这个条件。
如果不要求「非空」,那么可以把问题成对于每个元素,都为这个元素选取一个它所属的集合。方案数为:
mn m n
再加上「非空」这一条件,可以考虑容斥,枚举 {1,2,...,m} { 1 , 2 , . . . , m } 的一个子集 S S ,强制 S'>S 内所有元素对应的集合全部为空。根据容斥原理,
T(n,m)=∑S⊂{1,2,...m}(−1)|S|×(m−|S|)n T ( n , m ) = ∑ S ⊂ { 1 , 2 , . . . m } ( − 1 ) | S | × ( m − | S | ) n
利用上组合数,把枚举 S S 改为枚举 |S|'>|S|
T(n,m)=∑i=0m(−1)i×(m−i)n×(mi) T ( n , m ) = ∑ i = 0 m ( − 1 ) i × ( m − i ) n × ( m i )

{nm}=1m!∑i=0m(−1)i×(m−i)n×(mi) { n m } = 1 m ! ∑ i = 0 m ( − 1 ) i × ( m − i ) n × ( m i )

三、形如 nm n m 的式子的分解

先给出公式:

nm=∑i=0∞{mi}×(ni)×i! n m = ∑ i = 0 ∞ { m i } × ( n i ) × i !
可以从组合数学的角度分析。
首先, {mi}×i!=T(m,i) { m i } × i ! = T ( m , i )
nm=∑i=0∞T(m,i)×(ni) n m = ∑ i = 0 ∞ T ( m , i ) × ( n i )
这就是在 n n 个集合中选出一些集合,用 m'>m 个元素填充选出的集合, 使得被选出的集合不得为空。换一种想法,是在 n n 个集合中,先指定一部分集合必须为空,剩下的集合必须非空,并用 m'>m 个元素填充 指定非空的集合
进一步进行转化——用 m m 个元素填充 n'>n 个集合, 集合空或非空都行的方案数。
因此方案数为 nm n m

四、应用

给定一个 n n 个点 m'>m 条边的 DAG 和参数 k k , 定义一条经过 l'>l 条边的路径的权值为 lk l k 。 对于 1≤i≤n 1 ≤ i ≤ n , 求出所有 1 1 i'>i 的路径的权值之和,对 998244353 998244353 取模。 1≤n≤105 1 ≤ n ≤ 10 5 。 1≤m≤2×105 1 ≤ m ≤ 2 × 10 5 。 0≤k≤500 0 ≤ k ≤ 500
显然拓扑排序,但直接求解有些困难,不妨转化下 lk l k

lk=∑i=0k{ki}×(li)×i! l k = ∑ i = 0 k { k i } × ( l i ) × i !
看到 0≤k≤500 0 ≤ k ≤ 500 的范围,将每个 i i 分开考虑。
定义 f[u][i]'>f[u][i] 表示从 1 1 u'>u 的所有路径的 (路径长度i) ( 路 径 长 度 i ) 之和。
根据组合数的递推公式,可以得出转移:对于一条边 <u,v> < u , v > <script id="MathJax-Element-4681" type="math/tex"> </script> ,
f[v][i]+=f[u][i]+f[u][i−1] f [ v ] [ i ] + = f [ u ] [ i ] + f [ u ] [ i − 1 ]
1 1 u'>u 的路径权值和就是:
∑i=0k{ki}×i!×f[u][i] ∑ i = 0 k { k i } × i ! × f [ u ] [ i ]

五、In A Word

第二类斯特林数的妙用就是转换形如 nm n m 的式子。

更多推荐

[学习笔记]浅析 第二类斯特林(Stirling)数 的妙用

本文发布于:2024-02-11 21:01:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1683454.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:斯特   妙用   学习笔记   第二类   Stirling

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!