数值计算第二类斯特林数的有效方法?

计算科学 算法 特殊功能
2021-12-03 18:30:22

有没有一种有效的方法来数值计算第二类斯特林数?

一个近似(不精确)的方法就足够了。类似于阶乘和伽马函数之间的联系的东西对我有用。

我用谷歌搜索了一下,没有发现任何有用的东西。

2个回答

您可以使用以下递归关系

S(n,k)=kS(n1,k)+S(n1,k1)

DLMF 方程 26.8.E22

并建立(三角形)表。

接受的答案需要O(kn)乘法和加法。还有一种方法使用O(klogn)加法、乘法和除法,使用下面的恒等式。

S(n,k)=1k!j=0k(1)j(kj)(kj)n

我们可以使用DLMF 方程 26.3.E6作为递推关系,以大大减少计算二项式系数所需的计算量。

(mn)=mn+1n(mn1)

伪代码:

accum ← 0
k_choose_j ← 1
for j = 0,1,...,k-1:
  accum ← accum + (-1)^j * k_choose_j * (k - j)^n
  k_choose_j ← k_choose_j * (k-j) / (j+1)
return accum / factorial(k)

请注意,在上面的伪代码中,我们k_choose_j在每次迭代结束时更新,所以我们需要在上面的关系中j + 1替换n