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\sum_^(-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_^s(n,i)*i!*c(m,i)
\]回來回來,,
如果要算第二類斯特林數,除了\(n^2\)的遞推有沒有別的方法呢?
顯然是有的
重新看看上面用容斥和組合意義得到的式子
\[s(n,m)=\frac\sum_^(-1)^kc(m,k)(m-k)^n
\]整理一下
\[s(n,m)=\frac\sum_^(-1)^k\frac(m-k)^n
\]\[s(n,m)=\frac\sum_^m!\frac\frac
\]\[s(n,m)=\sum_^\frac\frac
\]這樣的話,是不是想到了多項式的卷積啦?
於是乎,可以用多項式卷積求出\(s(n,x)\)
複雜度\(o(nlogn)\)
第二類斯特林數總結
標籤 第二類斯特林數 最近做題的時候遇到了一些跟第二類斯特林數有關的東西,發現網上的資料不是很多,於是寫一篇部落格來總結一下。第二類斯特林數 s n,m 表示的是把n個不同的小球放在m個相同的盒子裡方案數。upd 為了看得清楚,有時候我們也用 begin n m end 來表示 s n,m 一般有兩...
演算法 第二類斯特林數Stirling
第二類stirling數實際上是集合的乙個拆分,表示將n個不同的元素拆分成m個集合的方案數,記為 或者。第二類stirling數的推導和第一類stirling數類似,可以從定義出發考慮第n 1個元素的情況,假設要把n 1個元素分成m個集合則分析如下 1 如果n個元素構成了m 1個集合,那麼第n 1個...
學習筆記 第二類斯特林數
在組合數學中,有幾個重要的 遞推數 而筆者今天要介紹的,就是其中的第二類斯特林數。第二類斯特林數 即斯特林子集數 beginn k end 也記作 s n,k 它表示將 n 個兩兩不同的元素,劃分為 k 個互不區分的非空子集的方案數。每次加入乙個新元素時,有兩種方案 根據加法原理,即可得出遞推式 b...