1. 程式人生 > 其它 >拉格朗日反演學習筆記

拉格朗日反演學習筆記

拉格朗日反演

用於在\(O(n\log n)\)的時間內求\([x^n]G(x)\),其中\(G(x)\)滿足\(F(G(x))=x\)\(F(x)\)已知,且\([x^0]F(x)=[x^0]G(x)=0,[x^1]F(x) \neq 0,[x^1]G(x) \neq 0\)

這裡有個小結論(我不會證):若\(F(G(x))=x\),則\(G(F(x))=x\)

\(g_i=[x^i]G(x)\),代入\(G(F(x))=x\)得到

\[\sum_{i=1}^{\infin} g_i\times F^i(x) = x \]

兩邊求導得

\[\sum_{i=1}^{\infin} g_i\times i \times F^{i-1}(x) \times F'(x) = 1 \]

考慮兩邊除以\(F^n(x)\)

,並取\([x^{-1}]\)的係數:

\[[x^{-1}]\sum_{i=1}^{\infin} g_i\times i \times F^{i-n-1}(x) \times F'(x) = [x^{-1}]\frac{1}{F^n(x)} \]

\(i\neq n\)時,\(F^{i-n-1}(x)F'(x)\)等價於\(\frac{1}{i-n}(F^{i-n})'(x)\),而任何函式求導後\(-1\)次項均為0,所以上式可以轉化為:

\[[x^{-1}] g_n\times n \times \frac{F'(x)}{F(x)}=[x^{-1}]\frac{1}{F^n(x)} \]

對於\(\frac{F'(x)}{F(x)}\)

,有:

\[\begin{aligned} \frac{F'(x)}{F(x)} &= \frac{a_1+2a_2x+3a_3x^2+...}{a_1x+a_2x^2+a_3x^3...}\\ &= \frac{a_1+2a_2x+3a_3x^2+...}{a_1x}\times\frac{1}{1+\frac{a_2}{a_1}x+\frac{a_3}{a_1}x^2+...} \end{aligned} \]

根據多項式求逆,後面那個多項式的常數項為\(1\),而前面那個多項式的\(-1\)次項的係數為1,於是\([x^{-1}]\frac{F'(x)}{F(x)}=1\)

代入得

\[g_n=[x^{-1}]\frac{1}{nF^n(x)} \]

再令\(F'(x)=F(x)/x\),原式就有:

\[g_n=[x^{n-1}]\frac{x^n}{nF^n(x)}=[x^{n-1}]\frac{1}{nF'^n(x)} \]

於是就可以\(n \log n\)求第\(n\)次項了。