阶乘幂 (Factorial Power)
主要有递进阶乘和递降阶乘两种. 分别记为:
x¯¯¯n=n−1∏i=0(x+i)=(x+n−1)!(x−1)!xn––=n−1∏i=0(x−i)=x!(x−n)!
一般常用的是递降阶乘, 也就是 OI 中经常提到的下降幂.
第一类斯特林数
我们定义第一类斯特林数 s(a,b) 为:
xn––=n∑i=0s(n,i)xi
我们记:
[ab]=|s(a,b)|s(a,b)=(−1)a−b[ab]
[ab] 即为无符号斯特林数. 无符号斯特林数有性质:
x¯¯¯n=n∑i=0[ni]xi
圆排列
圆排列指从全集中取特定数量元素排成一个环而不是一个序列的总方案数. 记 Q(a,b) 表示把大小为 a 的全集中取 b 个元素排成一个环的方案数. 因为对于 Q(a,b), 每个方案对应了 b!(ab) 中的 b 个方案, 因此有:
Q(a,b)=b!(ab)b=a!(a−b)!b
无符号斯特林数 [ab] 的组合意义是把 a 个元素分成 b 个子集, 并且将每个子集圆排列的方案数.
根据组合意义, 我们可以得到无符号斯特林数的递推式:
[ab]=(a−1)[a−1b]+[a−1b−1]
其意义为: [ab] 中的方案, 由两种情况组成: 第一种是任意 [a−1b−1] 中的情况, 加上第 a 个元素自成一环; 第二种是将 [a−1b] 中的每种方案, 将第 a 个元素插入到前 a−1 个元素中任意一个的后面形成的方案.
根据 s(a,b) 和 [ab] 的互推式可以得到 s(a,b) 的递推式:
s(a,b)=(1−a)s(a−1,b)+s(a−1,b−1)
第二类斯特林数
定义第二类斯特林数 {ab} 为:
xn=n∑i=0{ni}xi–
第二类斯特林数有定义式:
{ab}=1b!b∑i=0(−1)i(bi)(b−i)a=b∑i=0(−1)i(b−i)ai!(b−i)!
第二类斯特林数 {ab} 的组合意义是将 a 个元素分成 k 个非空子集的方案数. 因此有递推式:
{ab}=b{a−1b}+{a−1b−1}
对于 {ab} 的所有方案, 可以分为两种情况. 一种是元素 a 独自分到第 a 个集合, 和 {a−1b−1} 中的方案一一对应; 另一种是元素 a 加入到 {a−1b} 任意方案中的 b 个集合之一, 所以一个 {a−1b} 的方案对应 b 个 {ab} 的元素.
下降幂多项式
我们把形如下式的多项式称为下降幂多项式.
f(x)=n∑i=0aixi–
如果我们有多项式 f(x)=n∑i=0aixi, 需要求出一组系数 b, 使得 f(x)=g(x)=n∑i=0bixi–, 可以尝试使用第二类斯特林数:
n∑i=0bixi–=n∑i=0aixin∑i=0bixi–=n∑i=0aii∑j=0{ij}xj–n∑i=0bixi–=n∑j=0xj–n∑i=jai{ij}bi=n∑j=iaj{ji}
下降幂和组合数
如果有组合数 (ab), 那么它乘以 b 的下降幂有如下式子:
bx––(ab)=a!b!(a−b)!×b!(b−x)!=a!(a−b)!(b−x)!=(a−x)!(a−b)!(b−x)!ax––=(a−xb−x)ax––
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)