1. 程式人生 > >趣談生成函數 =v=

趣談生成函數 =v=

感到 rac 遞推 class 斐波那契 區別 沒有 SQ 大於

趣談生成函數 =v=

今天luyouqi在洛谷隨機跳題rand出來一道生成函數板子題,然後我給做了(霧

發現小夥伴們還不會生成函數,於是我試著寫這篇生成函數簡介。(其實我也不怎麽會生成函數這麽高級的東西,本篇純屬道聽途說,大家看著當故事娛樂一下就好)

食用指南

  • 筆和草算紙是推薦的食用工具

從前有一個無限長的隨便一個數列\(a = \{2, 1, 4, 7, 4\}\),有一天,一個大佬說:能不能用一個函數表示這個數列呢?於是大佬把\(a\)的每一項當做一個多項式的系數,得到了多項式函數\(f(x) = 2 + x + 4x^2 + 7x^3 + 4x^4\),用來表示上面那個序列。大佬很開心。

大佬的朋友——蒟蒻感到疑惑:這個函數代入一個\(x\),得到的東西有什麽意義啊?

大佬思考了一會,說:也沒什麽意義。

蒟蒻說:那你研究它有個*兒用?

大佬又思考了一會,找到了它的一種用途。假如數列\(a\)代表一類物品,中\(a_i\)表示這類物品中選\(i\)件物品的方案數——例如\(a = \{1, 1, 1\}\)表示A類物品中可以選0件或1件或2件,但不能選大於2件;又例如無限長數列\(b = \{1, 0, 0, 1, 0, 0, 1, 0, 0, 1...\}\)表示B類物品只能選3的倍數件。這時候,把\(f(x) = 1 + x + x^2\)\(g(x) = 1 + x^3 + x^6 + x^9 ...\)

乘起來,得到另一個函數\(h(x) = 1 + x + x^2 + x^3 + x^4 + ...\)。這個函數有什麽意義呢?它的第\(i\)項的系數就是選A、B兩種物品共\(i\)件的方案數。

蒟蒻說:這有啥,不就是把兩個多項式乘起來麽?和\(O(n^2)\)一個個枚舉有什麽區別?

大佬說:嗯……你可以FFT……

蒟蒻:哦。沒有這個函數我也知道可以FFT。

大佬不認為這個“用函數表示數列”的東西很沒用,他決定繼續研究,還給它取了個名字叫做數列的“生成函數”,表示用這個函數能生成(表示)一個數列。

有一天,大佬告訴蒟蒻他發現了一個規律——\(a = \{1, 1, 1, 1, 1...\}\)

的生成函數是\(f(x) = \frac{1}{1 - x}\)

蒟蒻說:老哥,您不會是研究數學研究傻了吧?它的生成函數不是\(1 + x + x^2 + x^3...\)嘛?怎麽會等於您這個\(\frac{1}{1 - x}\)呢?

大佬說:對啊!\(1 + x + x^2 + x^3...\)就等於\(\frac{1}{1 - x}\)

蒟蒻:餵,大連市第七人民醫院嘛?

大佬:……在\(x\in (-1, 1)\)的時候。

蒟蒻:你不早說!等等,為什麽\(x\in (-1, 1)\)時就相等了?

大佬:等比數列求和公式啊,\(1 + x + x^2 + x^3...\)的前\(n\)項和等於\(\frac{1 - x^n}{1 - x}\),這是個無限長的數列,\(n\)趨近於無窮的時候\(x^n\)趨近於0,這不就相等了嘛!

蒟蒻:啊,對啊!可是好好的一個函數,你憑空給限定了定義域,這還是原來那個函數嘛?

大佬:不是你說的生成函數中的\(x\)沒有意義嘛!還有,你看\(1 + x^2 + x^4 + x^6...\)這個函數,它是不是等於\(\frac{1}{1-x^2}\)

蒟蒻:對,把前一個式子中的\(x\)換成\(x^2\)不就好了嘛!可是\(1 + 2x + 3x^2 + 4x^3...\)這個函數,它等於什麽?

大佬:等於\(\frac{1}{(1 - x)^2}\)啊!你看,這兩式子分別求導,得到……算了,說了你也不懂,那你把兩個\(1 + x + x^2 + x^3...\)乘起來不就好了嘛!

蒟蒻:蛤?我看看……的確誒!

大佬:我還知道\(1 + 3x + 6x^2 + 10x^3 + 15x^4...\)的生成函數是多少呢!是\(\frac{1}{(1-x)^3}\)!推廣開來,\(\frac{1}{(1 - x)^k}\)生成的數列是\(\sum_i^\infty C_{i + k - 1}^{k - 1}\)

蒟蒻:為什麽啊?

大佬:你看\(\frac{1}{(1 - x)^k}\)就是\(k\)\(\frac{1}{1 - x}\)相乘,就是\(k\)\(1 + x + x^2 + x^3...\)相乘嘛。那麽它的第\(i\)項系數就是從\(k\)\(1 + x + x^2 + x^3...\)中每個選出一項,乘起來恰為\(x^i\)的方案數,就是\(i = x_1 + x_2 + ... + x_k\)的非負整數解的組數,你用組合數學中的所謂“隔板法”求一下,是不是\(C_{i + k - 1}^{k - 1}\)

蒟蒻:有道理!

大佬:了解了\(\frac{1}{1-x^k}\)\(\frac{1}{(1-x)^k}\)這兩種特殊生成函數,就掌握了一類題的技巧——來做道題吧!Luogu P2000 歡迎你!


大佬:我還會用生成函數求斐波那契數列通項!

蒟蒻:這麽牛逼?

大佬:首先啊,你看這個斐波那契數列的生成函數\(f(x) = 1 + x + 2x^2 + 3x^3 + 5x^4 + 8x^5...\),然後把它乘個\(x\),得\(x\cdot f(x) = x + x^2 + 2x^3 + 3x^4 + 5x^5...\),用前式減去後式,得到\(f(x) - x \cdot f(x) = 1 + x ^ 2 + x^3 + 2x^4 + 3x^5... = 1 + x^2 \cdot f(x)\),所以\(f(x) = \frac{1}{1 - x - x^2}\)

蒟蒻:可是這不是我們之前見過的那兩種特殊生成函數,你怎麽把它還原成數列呢?

大佬:我打算把它變成等比數列求和的形式!這個分母\(1-x-x^2\)是可以因式分解的,分解後就是\((1-\frac{1-\sqrt5}{2})(1-\frac{1+\sqrt5}{2})\),所以\(\frac{1}{1 - x - x^2} = \frac{1}{(1-\frac{1-\sqrt5}{2})(1-\frac{1+\sqrt5}{2})}\),看著非常難受,裂項一下,得到\[ \frac{1}{(1-\frac{1-\sqrt5}{2})(1-\frac{1+\sqrt5}{2})} = -\frac{1}{\sqrt5}\frac{1}{(1-\frac{1-\sqrt5}{2})} + \frac{1}{\sqrt5}\frac{1}{(1-\frac{1+\sqrt5}{2})}\]。這就成了兩個等比數列求和公式乘個常數再相加的形式了!把兩個等比數列還原成數列,得到\[fib_n = -\frac{1}{\sqrt5}(\frac{1-\sqrt5}{2})^n + \frac{1}{\sqrt5}(\frac{1+\sqrt5}{2})^n\],這就是斐波那契數列通項公式了!

蒟蒻:哇!這麽神奇!

大佬:據說這種方法可以應用到各種線性齊次遞推中哦~

趣談生成函數 =v=