與一般想法不同,多項式也有自己的對數函數和指數函數。它們也可以在 \(O(n\log n)\) 的優秀時間內求解。
在學習多項式對數函數和指數函數前,請確保已掌握多項式的逆和基本的微積分知識。
有這么一個式子廣為人知
事實上對數函數也可以像這樣用無限冪級數定義:
它們就是大名鼎鼎的泰勒級數。指數函數的泰勒展開式對於任意實數 \(x\) 都成立,對數函數的泰勒展開式只對定義域內的一些 \(x\) 成立;不過我們並不關心 \(x\),只關心其系數。多項式的指數函數和對數函數就是用這些級數定義的。因為這些級數都是無限級數,多項式只在模意義下存在指數函數和對數函數。
多項式對數函數
多項式 \(g(x)\) 在模 \(x^n\) 意義下的對數函數存在,當且僅當其常數項為 \(1\),否則它對應的泰勒級數不收斂。把 \(\ln g(x)\) 視作一個關於 \(x\) 的函數,我們有
只要對 \(g(x)\) 求導,再乘上 \(\dfrac{1}{g(x)}\) 就能夠得到 \(\ln g(x)\) 的導數,這個導數的積分就是 \(\ln(g(x))\)。多項式求導、積分都是非常容易的事情,但是,\(\dfrac{g(x)^\prime}{g(x)}\) 的不定積分隨常數項的不同有無窮多個,我們應該取哪一個呢?我們取常數項為 \(0\) 的那個作為答案,因為只有常數項為 \(0\) 的多項式在模意義下存在指數函數。
多項式指數函數
上面我們提到,多項式 \(g(x)\) 在模 \(x^n\) 意義下的指數函數存在,當且僅當其常數項為 \(0\),否則它對應的泰勒級數也一樣不收斂。由於 \(\exp f(x)\) 的導數里還是存在 \(\exp f(x)\),我們只能用分治 FFT 的方法 \(O\left(n\log^2n\right)\) 求出。這種方法由於比較緩慢而不常使用,通常我們使用Newton's Method \(O(n\log n)\) 求。
分治法並非一無是處。這個方法不需要寫多項式求逆和多項式對數函數,寫起來要快很多;雖然復雜度多一個對數,但常數較小,也不會慢特別多。
多項式的指數函數是有實際的組合意義的。設 \(f(x)\) 是一個大小為 \(i\) 的盒子內部分配方案數的指數型生成函數(即,\([\dfrac{x^i}{i!}]f(x)\) 表示一個盒子裝 \(i\) 個小球的方案數),則 \(\exp f(x)\) 表示 \(i\) 個有標號小球分配到任意多個無標號盒子的方案數的指數型生成函數(即,\([\dfrac{x^i}{i!}](\exp f(x))\) 表示 \(i\) 個相互區分的小球放到若干個完全一樣的盒子的方案數)。這個組合意義與指數函數的冪級數有關系。
這一點的證明只需用下式說明
其中的含義是:
\(f^i(x)\) 是將有標號小球分配到 \(i\) 個有標號盒子的方案數的指數型生成函數;
\(\dfrac{f^i(x)}{i!}\) 是將有標號小球分配到 \(i\) 個無標號盒子的方案數的指數型生成函數;
\(\sum\dfrac{f^i(x)}{i!}\) 是將有標號小球分配到任意多個無標號盒子的方案數的指數型生成函數;
\(\prod \exp f_ix^i\) 的含義請自行思考。
歐拉變換
在多項式指數函數中,我們提到了多項式指數函數的組合含義。如果要求無標號小球放到無標號盒子的方案數,我們應該怎么做呢?
令 \(f(x)=\sum\limits_{i=1}^nf_ix^i\),則我們可以寫出所求的普通型生成函數 \(g(f(x))\)
注意
- 在指數函數的組合意義中,我們使用了指數型生成函數(EGF),而在歐拉變換中,我們使用的卻是普通型生成函數(OGF)。
出現了 \(1-x^k\),對此敏感的我們考慮求出它的對數函數
交換求和順序
於是
我們把 \(g(f(x))\) 稱作 \(f(x)\) 的歐拉變換,它的組合含義是無標號小球放到無標號盒子的方案數。我們可以用 \(O(n\log n)\) 的復雜度求一個多項式 \(f(x)\) 的歐拉變換。
付公主的背包的另一種解釋
- 付公主的背包可以用歐拉變換解釋。完全背包的本質就是把 \(s\) 個無標號體積放到 \(n\) 種有標號商品中。