歐拉數學習筆記


歐拉數學習筆記

定義

定義\(\left<\begin{matrix}n\\i\end{matrix}\right>\)為長度為\(n\)的排列\(p\),滿足\(p_j<p_{j+1}\)的數目為\(i\)的排列數,也就是歐拉數。

求法

首先可以考慮dp轉移\(\left<\begin{matrix}n\\i\end{matrix}\right>\),考慮現在有\(1\sim n-1\),加入\(n\)

  • 如果\(n\)加在排列最左邊,數目不變,由\(\left<\begin{matrix}{n-1}\\i\end{matrix}\right>\)轉移
  • 如果\(n\)加在排列最左邊,數目增加,由\(\left<\begin{matrix}{n-1}\\{i-1}\end{matrix}\right>\)轉移
  • 插在某個\(p_j<p_{j+1}\)中間,數目不變,由\(\left<\begin{matrix}{n-1}\\{i}\end{matrix}\right>\times i\)轉移
  • 插在某個\(p_j>p_{j+1}\)中間,數目增加,由\(\left<\begin{matrix}{n-1}\\{i-1}\end{matrix}\right>\times (n-1-i)\)轉移

總轉移方程:

\[\left<\begin{matrix}n\\i\end{matrix}\right>=(i+1)\left<\begin{matrix}n-1\\i\end{matrix}\right>+(n-i)\left<\begin{matrix}n-1\\i-1\end{matrix}\right> \]


但是有些出題人就說了:我計數題都出\(1e5\),你這么遞推,我很不滿意!

下面給出容斥求法:
\(\begin{vmatrix}n\\k\end{vmatrix}\)表示長度為\(n\)的排列,至少有\(k\)\(p_j<p_{j+1}\)的方案數。
二項式反演:

\[\begin{vmatrix}n\\k\end{vmatrix}=\sum\limits_{i=k}^n\dbinom ik\left<\begin{matrix}n\\i\end{matrix}\right>\\ \left<\begin{matrix}n\\k\end{matrix}\right>=\sum\limits_{i=k}^n(-1)^{i-k}\dbinom ik\begin{vmatrix}n\\i\end{vmatrix} \]

考慮求\(\begin{vmatrix}n\\k\end{vmatrix}\),將小於號連成的兩個位置看成一個連通塊,那么一共就有\(n-k\)個連通塊,那么聯通塊內部排列只有一種,因為每個連通塊不能為空,所以一個連通塊的 EGF 就是\(e^x-1\),因為是「至少」,所以兩個連通塊之間可以隨意合並,那么\(\begin{vmatrix}n\\k\end{vmatrix}=n![x^n](e^x-1)^{n-k}\)
把上式用二項式定理拆開:

\[\begin{aligned} n![x^n](e^x-1)^{n-k}&=n![x^n]\sum_{i=0}^{n-k}{n-k\choose i}e^{ix}(-1)^{n-k-i}\\ &=\sum_{i=0}^{n-k}{n-k\choose i} i^n (-1)^{n-k-i}\\ &=(n-k)! \sum_{i=0}^{n-k}\frac {i^n}{i!}\frac{(-1)^{n-k-i}}{(n-k-i)!} \end{aligned} \]

卷一下就可以求出每個\(\begin{vmatrix}n\\k\end{vmatrix}\)了。

最后我們再 NTT 加速反演就可以求出\(\left<\begin{matrix}n\\k\end{matrix}\right>\)了,總復雜度\(O(n\log n)\)


但是發現上面的做法還是naive了,發現可以不用卷兩遍。
\(\begin{vmatrix}n\\k\end{vmatrix}=\sum_{i=0}^{n-k}{n-k\choose i} i^n (-1)^{n-k-i}\)直接代回\(\left<\begin{matrix}n\\k\end{matrix}\right>=\sum\limits_{i=k}^n(-1)^{i-k}\dbinom ik\begin{vmatrix}n\\i\end{vmatrix}\),那么有

\[\begin{aligned} \left<\begin{matrix}n\\k\end{matrix}\right>&=\sum\limits_{i=k}^n(-1)^{i-k}\dbinom ik\begin{vmatrix}n\\i\end{vmatrix}\\ &=\sum_{i=k}^n(-1)^{i-k}{i\choose k}\sum_{j=0}^{n-i}{n-i\choose j}j^n(-1)^{n-i-j}\\ &=\sum_{i=k}^n{i\choose k}\sum_{j=0}^{n-i}{n-i\choose j}j^n(-1)^{n-k-j}\\ &=\sum_{j=0}^{n-k}\sum_{i=n-j}^n{i\choose k}{n-i\choose j}j^n(-1)^{n-k-j}\\ &=\sum_{j=0}^{n-k}(-1)^{n-k-j}j^n\sum_{i=0}^n{i\choose k}{n-i\choose j} \end{aligned} \]

考慮后面\(\sum_{i=0}^n{i\choose k}{n-i\choose j}\)怎么求。

\[{i\choose k}=[x^{i-k}]\frac {1}{(1-x)^{k+1}},{n-i\choose j}=[x^{n-i-j}]\frac {1}{(1-x)^{j+1}}\\ \Rightarrow \sum_{i=0}^n{i\choose k}{n-i\choose j}=[x^{n-j-k}]\frac 1{(1-x)^{k+j+2}}={n+1\choose k+j+1} \]

然后可以\(O(n)\)算出一個\(\left<\begin{matrix}n\\k\end{matrix}\right>\)了(一行減法卷積\(O(n\log n)\))。


還有一個高妙的組合意義

這里有個模板題

應用

CF1349F1 Slime and Sequences (Easy Version)

直接求好序列十分頭疼,所以我們建立長度為\(n\)的好序列與長度為\(n\)的排列之間的關聯。
對於一個排列\(p\),中的某個\(p_i\),如果\(j\in[1,i)\)中有\(k\)\(p_{j}<p_{j+1}\),那么\(a_{p_i}=k+1\)
這樣構造的\(p\)\(a\)一一對應,下面簡要證明:
首先\(a\)中的\(1\)肯定放在最前面,且對於\(p\)中極長的前綴\(p_{1...k}\)滿足\(p_{i}>p_{i+1},i\in[1,k)\)\(a_{p_{1...k}}=1\),如果我們要填\(2\)的話一定會使得有一個\(1\)\(2\)前面,\(2,3\)的情況同理。
感性理解一下就好了

對於\(ans_k\)考慮每個位置\(i\)的貢獻,那么有

\[ans_k=\sum\left<\begin{matrix}n\\k-1\end{matrix}\right>{n\choose i}(n-i)! \]

因為不會拉格朗日反演,所以 F2 鴿了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM