题目简述:从$n leq 10^9$个人中选取一个非空子集$X$,求所有可能的子集大小的$k leq 5000$次方$|X|^k$之和。
解:code
令$[n] = {1, 2, 3, dots, n }$。因为$|emptyset| = 0$,不影响结果。故即求
$$
sum_{X subseteq [n]} |X|^k
= sum_{x=0}^n x^k sum_{X subseteq [n]} [|X|=x] = sum_{x=0}^n inom{n}{x} x^k.
$$
利用斯特林数的性质,我们有
$$ x^n = sum_{k=0}^n k! egin{Bmatrix} n \ k end{Bmatrix} inom{x}{k}. $$
带入所求式得
$$
egin{aligned}
sum_{x=0}^n inom{n}{x} i^k
& = sum_{x=0}^n inom{n}{x} sum_{i=0}^k i! egin{Bmatrix} k \ i end{Bmatrix} inom{x}{i} \
& = sum_{i=0}^k egin{Bmatrix} k \ i end{Bmatrix} sum_{x=i}^n frac {n!} {(n-x)! (x-i)!} \
& = sum_{i=0}^{min{k, n}} frac {n!} {(n-i)!} egin{Bmatrix} k \ i end{Bmatrix} sum_{x=i}^n inom{n-i}{n-x} \
& = sum_{i=0}^{min{k, n}} n^{underline{i}} 2^{n-i} egin{Bmatrix} k \ i end{Bmatrix}
end{aligned}
$$
在计算出第二类斯特林数之后,代入计算即可。时间复杂度为$O(k^2)$。