第一類和第二類斯特林數

2022-05-30 19:06:11 字數 1394 閱讀 2072

第一類斯特林數定義如下:

\(s_1(n,k)\)表示\(n\)個元素組成\(k\)個圓排列的方案數。

其中\(n\)個元素的圓排列定義為\(n\)個元素圍成一圈的排列,兩個圓排列本質相同當且僅當兩個圓排列以任意方式旋轉之後相同。

那麼我們可以得到第一類斯特林數的遞推公式:

\[s_1(n,k)=s_1(n-1,k-1)+(n-1)\cdot s_1(n-1,k)

\]這個很好理解,第一項是第\(n\)個元素單獨組成乙個圓排列,第二項是不單獨組成,那麼我可以把第\(n\)個元素放在任意乙個元素的左邊(右邊),這裡左邊和右邊其實是等價的。

這樣求出\(s_1(n,k)\)時空複雜度都是\(o(nk)\)的,但是我們還有更優秀的做法:

考慮下面這個生成函式:

\[f(x)=\prod_^(x+i)

\]其中\([x^k]f(x)\)就是\(s_1(n,k)\)。

這個可以對照著前面的遞推方程感性理解,基本上就是每乘一次\((x+i)\)就表示從\(s_1(n,k)\)轉移到\(s_1(n+1,k)\)。

那麼我們就可以分治\(fft\)優化到\(o(n\log^2n)\)。

好像還有一種倍增的\(o(n\log n)\)的做法先咕著以後再填。

例題:[洛谷4609] [fjoi2016]建築師,這個直接暴力遞推就好了。

[cf960g] bandit blues,這個需要分治\(fft\)。

第二類斯特林數定義如下:

\(s_2(n,k)\)表示把\(n\)個不同的元素放到\(k\)個無差別的盒子的方案數。

那麼很顯然我們可以得到遞推式:

\[s_2(n,k)=s_2(n-1,k-1)+k\cdot s_2(n-1,k)

\]複雜度\(o(nk)\)。

考慮乙個比較有意思的東西,假設我們現在要算\(s_2(n,k)\),設\(f(i)\)表示至少\(i\)個盒子空著的方案數,\(g(i)\)表示恰好\(i\)個盒子空著的方案數。

那麼我們可以得到:

\[f(i)=\sum_^k\binomg(j)=\binom(k-i)^n

\]對其廣義容斥一下可得:

\[g(i)=\sum_^k(-1)^\binom\binom(k-j)^n

\]那麼可以據此算出\(s_2\):

\[s_2(n,k)=g(0)=\sum_^k(-1)^i\binom(k-i)^n

\]注意到這是個卷積的形式,所以我們可以在\(o(n\log n)\)的時間內求出\(s_2(n,i)\)的每一項,這裡每一項指的是對於給定的\(n\),\(i\in [1,n]\)的每一項。

例題:洛谷p4091 [heoi2016/tjoi2016]求和,solution是很久以前寫的了,不是很好看...還是放這裡吧:sol。

第二類斯特林數總結

標籤 第二類斯特林數 最近做題的時候遇到了一些跟第二類斯特林數有關的東西,發現網上的資料不是很多,於是寫一篇部落格來總結一下。第二類斯特林數 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...