第一类斯特林数小结

第一类斯特林数

s 1 n m s1_n^m s1nm表示将 n n n个数放进 m m m个圆排列的方案数。
有一个显然的递推式:
s 1 n m = s 1 n − 1 m − 1 + ( n − 1 ) s 1 n − 1 m s1_n^m=s1_{n-1}^{m-1}+(n-1)s1_{n-1}^m s1nm=s1n1m1+(n1)s1n1m,对应的意义:要么第 n n n个单独构成一个新的圆排列,要么放在之前某个数的后面。
还有一种组合意义:一共进行 n n n次操作,第 i i i次可以添加跟第 1 1 1~ i − 1 i-1 i1中任意一种物品相同的旧物品或者添加一种新物品,问最后一共有 m m m中不同物品的方案数,由此可以推出第一类斯特林数的生成函数:
∏ i = 0 n − 1 ( x + i ) \prod_{i=0}^{n-1}(x+i) i=0n1(x+i)
到这里就有两种挺明显的预处理斯特林数方法了:

  1. 如果要求出每一个 s 1 i j s1_i^j s1ij,可以用 O ( n m ) O(nm) O(nm)递推
  2. 如果只用求出每一个 s 1 a k , a s1_a^k,a s1ak,a为定值,可以上分治 f f t fft fft做到 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)

但有些毒瘤出题人偏偏会卡你的分治 f f t fft fft,需要我们在更短的时间内求出某一行的值。
于是就有了下面的倍增算法:
假设我们已经求出了 f n ( x ) = ∏ i = 0 n − 1 ( x + i ) = ∑ i = 0 n a i x i f_n(x)=\prod_{i=0}^{n-1}(x+i)=\sum_{i=0}^na_ix^i fn(x)=i=0n1(x+i)=i=0naix

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值