1.普通生成函數OGF
對於無順序的計數
f(x)=i=0∑aixi
這裏的x是形式冪級數,我們不關心x的具體取值,我們只關心繫數,可以通過複分析證明可以無視收斂條件化簡:∑i=0xi=1−x1
Ex1 : 求出 Ai = i*i 的生成函數
考慮f(x)=∑i=0ixi=∑i=1xi∑j=0xj=1−xx⋅1−x1
∴A(x)=i=0∑i∗ixi=i=0∑(i−1)ixi+ixi=(1−x)2x+i=2∑xij=0∑jxj=(1−x)2x+1−xx2⋅(1−x)2x=(1−x)3x3−x2+x
2.指數生成函數
對於有順序的計數。
f(x)=∑i=0i!aixi
卷積時自帶排列。
3.FFT
4.循環卷積。
5.二維循環卷積
參考多維DFT
6.bluestein算法
https://blog.csdn.net/outer_form/article/details/52386685
計算n位循環卷積的方法。
(mod1163962801)
這是1~22的lcm,他有2到22次單位根,可以直接在模意義下的環內用整數做DFT
7.單位根反演。
我博客裏有。
一個圖中,求走過步數i爲K的倍數的路徑的(in)之和。
首先可以讓每個點連一個自環,那麼長度爲i的路徑到n時就會選擇n-i個時刻走自環,那麼就可以解決這個組合數了。
然後直接上單位根反演,把走一步後乘上wni,i∈[0,K−1] 加起來除以K就行了。
其實也可以矩陣中每個元素維護一個K−1次多項式,然後做長度爲K的循環卷積,最後插值回去,並無大差異。
8.Polya生成函數
有一個長度爲n的項鍊,m種顏色。
求對於顏色i用了Ci個的在旋轉置換下的等價類數。
對於置換(移動p位)的不動點的生成函數:fp(x1,x2,x3..xm)=(∑i=1mxigcd(p,n))gcd(p,n)n
對於等價類的生成函數:F(x1,x2....xm)=n∑pfp(x1,x2...xm)
算就是了。
9.多項式可以執行的操作
Ⅰ:多項式牛頓迭代:
對於f(x)展開一階即認爲f(x)=f(x0)+f′(x0)∗(x−x0)。
然後求f(x)=0的x的解。
x=f′(x0)−f′(x0)f(x0)
不斷用x0求出新的x,把x0=x,如果f(x)=0則結束。
對於多項式我們來抽象的實現牛頓迭代。
A(x)=f′(B(x))−f′(B(x))f(B(x))
每次多項式長度都會*2.
Ⅱ:多項式求逆:
A(x)=B(x)1
注意把A(x)−B(x)1=0牛頓迭代是有坑點的,需要特殊理解。
ⅠⅠⅠ:多項式除法。
A(x)=B(x)C(x)+D(x)
A(x1)=B(x1)C(x1)+D(x1)
xdeg(A)A(x1)=xdeg(B)B(x1)xdeg(C)C(x1)+xdeg(A)D(x1)
最後一項因爲deg(D)<deg(B)所以在(modxdeg(A)−deg(B)+1)的意義下是0.
對於A,B,C都只相當於把多項式的係數反轉。
那麼就可以算出C,然後算出D.
Ⅳ:多項式多點求值:
對於f(x)= sumi=0naixi求f(x1),f(x2)...f(xm)
設一個多項式π(i,j)=∏ij(x−xi)
若f(x)≡g(x)(modπ(1,k))
所以因爲f(xi)=f(x)(modx−xi)=g(xi)
這樣就可以類線段樹分治,每次兩個多項式取模把多項式次數減半。
V:多項式快速插值
用多項式科技優化拉格朗日插值。
發現可以直接分治,左半插值,右半插值,fl,r=fl,midπmid+1,r+fmid+1,rπl,mid ,兩個log美滋滋。但是初值需要知道yi=∏j!=i(xi−xj)F(xi)。
設Pi(x)=(x−xi)∏j(x−xj)
那麼yi=Pi(xi)F(xi)
那麼我們就需要算出Pi(xi)。
以小學生的素養知道分母爲0 ,再用小學生就應該會的微積分中的洛必達法則得出Pi(xi)=−xi(∏j(x−xj))′
對分子多項式多點求值就行了。
Ex1:分拆數
求對於n的不下降可重分拆方案數。
不是五邊形數的那個!!!!
推式子後exp
注意EGF的組合意義不要亂用。
…
開始線代?
範德蒙德矩陣
它的行列式∏j<i(xi−xj)可以用巧妙一下用多點求值。
Ex2
給出f(x)=∏i=0n(1−aixi),g(x)=∏i=0n(1−bixi)
求h(x)=∏i=0n∏j=0n(1−aibjxi+j)
泰勒展開ln(f(x))=∑k>0k(−1)k−1xk(∑i=0naik)
ln(h(x))=∑k>0k(−1)k−1xk(∑i=0n∑j=0naikbjk)
解出∑i=0naik,∑i=0nbik就可以直接推出ln(h(x))
常係數線性遞推。