1. 程式人生 > >關於第二類斯特林數的一丟丟東西

關於第二類斯特林數的一丟丟東西

mat 得到 表示 重新 是我 isp logs spl gpo

關於第二類斯特林數的一丟丟東西

第二類斯特林數

S(n,m)表示有\(n\)個有區別小球,要放進\(m\)個相同盒子裏,且每個盒子非空的方案數
考慮一個很容易的遞推:
\[S(n,m)=S(n-1,m-1)+m*S(n-1,m)\]
考慮組合意義:
假設前面的\(n-1\)個球丟進了\(m-1\)個組,因為每個組非空,所以這個球只有一種選擇——自己一組
如果前面的球已經分成了\(m\)組,那麽,這個球就有\(m\)種放法
所以這個遞推式就是這樣來的


那麽,只考慮組合意義可不可以算?
當然是可以的啦
寫式子:
\[S(n,m)=\frac{1}{m!}\sum_{k=0}^{m}(-1)^kC(m,k)(m-k)^n\]


為啥呢?
假設盒子有區別,並且我們允許空盒的存在
顯然的,\(m^n\)就是答案
但是我們當然就是不允許空盒存在啊
所以容斥一下
枚舉我當前有幾個空盒子存在
那麽先把這幾個盒子選出來,也就是\(C(m,k)\)
然後剩下\(m-k\)個盒子,\(n\)個球可以隨便放,也就是\((m-k)^n\)
最後退出來,我們盒子是沒有區別的,所以除以一個\(m!\)
這樣就是直接考慮了


那麽,我們來想想一個東西怎麽算?
\(m^n\)怎麽算?
考慮一下組合意義,把\(n\)個有區別的小球分給有區別的\(m\)個盒子裏,允許空盒的方案數
挺好呀,第二類斯特林數是啥意思?
\(S(n,m)\)表示\(n\)

個球丟進\(m\)個相同盒子裏,不允許空盒
好吧,那我枚舉一下有\(i\)個盒子不是空的
再把球丟進盒子不就是\(S(n,i)*i!\)
所以不就推出來啦?
\[m^n=\sum_{i=0}^{m}S(n,i)*i!*C(m,i)\]


回來回來,,
如果要算第二類斯特林數,除了\(n^2\)的遞推有沒有別的方法呢?
顯然是有的
重新看看上面用容斥和組合意義得到的式子
\[S(n,m)=\frac{1}{m!}\sum_{k=0}^{m}(-1)^kC(m,k)(m-k)^n\]
整理一下
\[S(n,m)=\frac{1}{m!}\sum_{k=0}^{m}(-1)^k\frac{m!}{k!(m-k)!}(m-k)^n\]


\[S(n,m)=\frac{1}{m!}\sum_{k=0}^{m}m!\frac{(-1)^k}{k!}\frac{(m-k)^n}{(m-k)!}\]
\[S(n,m)=\sum_{k=0}^{m}\frac{(-1)^k}{k!}\frac{(m-k)^n}{(m-k)!}\]
這樣的話,是不是想到了多項式的卷積啦?
於是乎,可以用多項式卷積求出\(S(n,X)\)
復雜度\(O(nlogn)\)

關於第二類斯特林數的一丟丟東西