日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

斯特林数 java实现_斯特林数学习笔记

發(fā)布時間:2025/3/17 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 斯特林数 java实现_斯特林数学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

定義

第一類斯特林?jǐn)?shù)\(s(n,m)\)表示把\(n\)個不同元素放到\(m\)個相同圓排列里的方案數(shù)。

有轉(zhuǎn)移方程:

\[s(n,m)=s(n-1,m-1)+(n-1)\times s(n-1,m)

\]

第二類斯特林?jǐn)?shù)\(S(n,m)\)表示把\(n\)個不同元素放到\(m\)個相同集合里的方案數(shù)。

有轉(zhuǎn)移方程:

\[S(n,m)=S(n-1,m-1)+m\times S(n-1,m)

\]

還有一些我自己的定義:

\(x\)的\(n\)次下降冪\(x_{(n)}=\prod_{i=0}^{n-1} (x-i)\)。

\(x\)的\(n\)次上升冪\(x^{(n)}=\prod_{i=0}^{n-1} (x+i)\)。

(只是因為我不會LaTeX寫這東西而已)

求法

第一類斯特林?jǐn)?shù)

求一行

有一個式子:

\[\sum_{k=0}^n s(n,k)x^k=\prod_{i=0}^{n-1}(x+i)=x^{(n)}

\]

利用數(shù)學(xué)歸納法來證明:

\[\begin{align*}

&x^{(n+1)}\\

=&(x+n)\sum_{i=0}^n s(n,i)x^i\\

=&\sum_{i=0}^{n+1}(s(n,i-1)+n\times s(n,i))x^i\\

=&\sum_{i=0}^{n+1}s(n+1,i)x^i

\end{align*}

\]

直接暴力分治FFT可以做到\(O(n\log^2 n)\),但還可以更好。

設(shè)

\[F_n(x)=\prod_{i=0}^{n-1}(x+i)=x^{(n)}

\]

由于\(F_{2n}(x)=F_n(x)F_n(x+n)\),所以求解\(F_{2n}(x)\)時,可以先求出

\[F_n(x)=\sum_{i=0}^n a_ix^i

\]

那么就有

\[\begin{align*}

F_n(x+n)&=\sum_{i=0}^n a_i(x+n)^i\\

&=\sum_{i=0}^n a_i\sum_{k=0}^i x^kn^{i-k}{i\choose k}\\

&=\sum_{k=0}^nx^k\frac{1}{k!}\sum_{i=k}^n a_i i!n^{i-k}\frac 1{(i-k)!}

\end{align*}

\]

后面顯然是個卷積的形式,可以FFT求出來。

兩邊都有之后就可以乘在一起了。復(fù)雜度\(O(n\log n)\)。

求一列

同樣是生成函數(shù),把\(n\)個球丟進(jìn)一個圓排列的方案數(shù)的質(zhì)數(shù)生成函數(shù)是

\[\sum_{n>0} (n-1)!\frac{1}{n!}x^n

\]

那么丟進(jìn)\(m\)個無序圓排列就是

\[\frac 1 {m!}(\sum_{n>0} (n-1)!\frac{1}{n!}x^n)^m

\]

然后多項式快速冪。

第二類斯特林?jǐn)?shù)

求一行

由組合意義可得

\[n^m=\sum_{k=0}^m k!{n\choose k} S(m,k)

\]

等價于

\[n^m=\sum_{k=0}^n k!{n\choose k} S(m,k)

\]

二項式反演,得

\[k!S(m,k)=\sum_{i=0}^k i^m(-1)^{k-i}{k\choose i}

\]

(上式直接容斥也可以得到相同結(jié)果)

可以發(fā)現(xiàn)展開之后就是一個卷積,暴力FFT即可。

求一列

等價于分成\(m\)個集合不變,丟\(n\)個球進(jìn)去,使得集合非空。

考慮\(n\)個球放入一個集合中的方案數(shù)的指數(shù)生成函數(shù),就是

\[\sum_{n} [n\ne 0]\frac{1}{n!}x^n

\]

也就是

\[e^x-1

\]

那么\(m\)個不同集合,生成函數(shù)就是

\[(e^x-1)^m

\]

由于集合無序,所以變成

\[\frac 1 {m!}(e^x-1)^m

\]

然后可以多項式快速冪。

斯特林反演

這里丟個式子,并不打算證明qwq

\[f_n=\sum_{k=0}^n s(n,k)g_k\Leftrightarrow g_n=\sum_{k=0}^n (-1)^{n-k}S(n,k)f_k

\]

斯特林?jǐn)?shù)與上升、下降、普通冪的關(guān)系

首先有上升下降冪之間的轉(zhuǎn)化:

\[x^{(n)}=(-1)^n (-x)_{(n)}\\

x_{(n)}=(-1)^n(-x)^{(n)}

\]

較為顯然,不證明。

然后有上面一個式子:

\[x^{(n)}=\sum_{i=0}^n s(n,i)x^i

\]

反演得到

\[x^n=\sum_{i=0}^n (-1)^{n-i}S(n,i)x^{(i)}

\]

上升和下降轉(zhuǎn)化一下得到

\[x_{(n)}=\sum_{i=0}^n s(n,i)x^{i}(-1)^{n-i}

\]

把\(x\)替換為\(-x\)又可以得到

\[x^n=\sum_{i=0}^n S(n,i)x_{(i)}

\]

諸如此類……

總結(jié)一下,應(yīng)該都是普通轉(zhuǎn)上升/下降時用第二類,上升/下降轉(zhuǎn)普通時用第一類。這也許和斯特林?jǐn)?shù)最基本的定義有關(guān)。

其他一些可能有用的東西

\[S(n+1,m+1)=\sum_k{n\choose k}S(k,m)

\]

利用組合意義很容易理解。

\[s(n+1,m+1)=\sum_k s(n,k){k\choose m}

\]

這個學(xué)長不知道怎么組合意義,那我更不會了qwq

update:會了。

考慮后面的式子的意義,就是選出一些元素組成 \(m\) 個圓排列,剩下的隨便搞。

那么就等價于加入一個特殊元素,分成 \(m+1\) 個圓排列,其中沒有特殊元素的圓排列就是需要的 \(m\) 個圓排列,剩下的從特殊元素這里斷開,可以對應(yīng)到一個排列,而眾所周知一個排列即可對應(yīng)到任意組合的圓排列。

總結(jié)

以上是生活随笔為你收集整理的斯特林数 java实现_斯特林数学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。