斯特林数
第二类斯特林数
-
记为
,或者 -
表示将
个两两不相同的元素分成若干的非空集合的方案数
递推式
通项公式
-
证明考虑二项式反演
-
设
表示 个不相同的物品放在 个不同集合中,允许有空集的方案数 -
设
表示 个不相同的物品放在 个 不同集合中,不允许有空集的方案数
-
那么二项式反演后,因为原本的意思是集合是没有区分的,那么
是 的 倍 -
那么最后的结果就是最上面的那个式子
-
对应的,有这样一个式子
-
组合意义就是
个有标号物品放在 个有标号的盒子的方案数 -
通过这个式子,可以求自然数幂和
- 把后面的用斯特林数表示
同一行的第二类斯特林数的计算
- 同一行指的是
相同
-
通项公式卷积
-
利用 EGF (应该不常用)
第一类斯特林数
-
记为
,或者 -
表示将
个元素分成 个非空轮换的方案数
递推式
通项公式
- 好像没有实用的
同一行的第一类斯特林数的计算
-
表示有关的生成函数
-
根据递推公式可以推出:
-
这个东西就是
的 次上升幂 -
对于这个的预处理,考虑
-
那么通过
求出 后卷起来就可以了
- 将后面那个东西二项式展开
-
后面的部分是一个减法卷积,把一个多项式反过来就可以卷起来了
-
还有一个更实用的方法,直接分治 NTT 对于这
个多项式卷起来,就是先卷左边再卷右边,最后合并两端的多项式,复杂度为
同一列的第一类斯特林数的计算
- 单个轮换的 EGF 是
-
它的
次幂就是 -
对于
次幂可以先取 ,然后
应用
- 非常神奇的是这个 markdown 的上划线一直不显示,所以对于显示不出来的 markdown 用中文标注了
上升幂和普通幂的相互转化
下降幂和普通幂的相互转化
斯特林反演
- 如果有
- 那么
- 还有一种形式
- 那么
- 对于一个
,实际上集合中的每个数都对集合中的每个数做了一个贡献,那么我们考虑对于一个数会有多少的贡献 - 对于
对 的贡献显然是它们在一个集合的方案数,再加上 自己对自己的贡献,那么对于一个数的贡献其实是 ,用通向大力算就可以了
-
对于最大值前面和后面都没有比自己更大的,所以以最大值为分界点
-
设
表示排列为 的前缀最大值有 个的方案数 -
,这个其实就是第一类斯特林数 -
那么
-
考虑这个的组合意义,
-
剩下的难点就在于快速的求出第一类斯特林数了,分治 NTT 可以做到
- 因为
,所以式子可以写成:
- 那么将后面的这个东西卷起来就可以了,复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】