生成函數的簡單應用


什么是生成函數:

對於序列$a_i$,定義它的生成函數為:

$$G(x) = \sum_{i=0}^{+\infty} a_ix^i$$

一個生成函數與一個序列是唯一對應的。

我們可以利用生成函數的性質解決一些組合問題。


一些重要的式子:

先寫幾個常用的生成函數(下式中$x∈(0,1)$):

  1. $$\frac{1-x^n}{1-x} = \sum_{i=0}^{n-1} x^i$$
  2. $$\frac{1}{1-x} = \sum_{i=0}^{+\infty} x^i$$
  3. $$\frac{1}{1-x^k} = \sum_{i=0}^{+\infty} x^{ki}$$
  4. $$\frac{1}{(1-x)^k} = \sum_{i=0}^{+\infty} C_{i+k-1}^{k-1} x^i$$
  5. $$\frac{\phi x^k}{1 - \lambda x} = \sum_{i=0}^{+\infty} \phi * \lambda^{i-k} x^i$$

現在我們來證明上面的式子:

  1. 由等比數列求和公式可知成立
  2. 考慮$1$式中的$x$趨近於無窮時,此時$x^n$趨近於$0$,這樣就證明了$2$式
  3. 同上,將$2$式右邊的$x^i$換成$(x^k)^i$即可
  4. $\frac{1}{(1-x)^k}$相當於是$k$個$\frac{1}{1-x}$乘起來,其中第$i$項的系數就是從$k$個$\sum_{i=0}^{+\infty} x^i$中各選一項,乘起來恰好為$x_i$的方案數。相當於是$k$個盒子放$i$個球,允許空盒的方案數。利用插板法可以得知答案為$C_{i+k-1}^{k-1}$
  5. emmmmm好像不大會

 例題:

  • 給定遞推式$a_n = 2a_{n-1} + 1$,求通項公式($a_0 = 0$)

  設這個數列的生成函數$G(x) = \sum_{i=0}^{+\infty} a_ix^i$

  $G(x) = (2a_0 + 1)x + (2a_1 + 1)x^2 + ...$

  $=(2a_0x + 2a_1x^2 + ...) + (x + x^2 + ...)$

  $=2x(a_0 + a_1x + ...) + (x + x^2 + ...)$

  $=2xG(x) + \frac{1}{1-x} - 1$

  即:$G(x) = \frac{x}{(1-x)(1-2x)} = \frac{1}{1-2x} - \frac{1}{1-x}$

  得到每一項系數(通項公式)為:$a_n = 2^n - 1$

 

  我們把題目中的十條限制用生成函數的方法寫出來:

  $\frac{1}{1-x^6}$,$\frac{1-x^10}{1-x}$

  $\frac{1-x^6}{1-x}$,$\frac{1}{1-x^4}$

  $\frac{1-x^8}{1-x}$,$\frac{1}{1-x^2}$

  $\frac{1-x^2}{1-x}$,$\frac{1}{1-x^8}$

  $\frac{1}{1-x^{10}}$,$\frac{1-x^4}{1-x}$

  把這十個式子乘起來,得到$\frac{1}{(1-x)^5}$

  那么答案(第$n$項的系數)就是$C_{n+4}^{4} = \frac{(n+1)(n+2)(n+3)(n+4)}{24}$

 

  • 求斐波那契數列的通項公式($a_0 = 0, a_1 = a_2 = 1, a_n = a_{n - 1} + a_{n - 2}$)

  先設生成函數$G(x) = \sum_{i=0}^{+\infty} = a_i x^i$

  由遞推公式可以得到(這里可能要多想一想):

  $$G(x) - x^2 - x = x(G(x) - x) + x^2G(x) = \frac{x}{1-x-x^2}$$

  我們要想辦法把這個式子化成上面的那種特殊生成函數

  $$\frac{x}{1-x-x^2} = \frac{x}{(1 - \frac{1 - \sqrt{5}}{2}x)(1 - \frac{1 + \sqrt{5}}{2}x)}$$

  為了方便書寫,我們設$\alpha = \frac{1 + \sqrt{5}}{2}, \beta = \frac{1 - \sqrt{5}}{2}$,我們再裂項一下,得到:

  $$\frac{1}{\sqrt{5}} (\frac{1}{1 - \alpha x} - \frac{1}{1 - \beta x})$$

  於是得到通項公式$a_n = \frac{\alpha^n - \beta^n}{\sqrt{5}}$

  即:$$a_n = \frac{\frac{1 + \sqrt{5}}{2} - \frac{1 - \sqrt{5}}{2}}{\sqrt{5}}$$

 

  • 求$n$位十進制數中出現偶數個$5$的數的個數

  先考慮遞推公式,假設我們已經知道了$n-1$位時的答案$a_{n-1}$,然后我們考慮在最后一位添加的數字

  設出現奇數個$5$的數的個數為$b_n$,那么容易得到:$a_n = 9a_{n-1} + b_{n-1}$

  又因為:$a_n + b_n = 9 * 10^{n-1}$

  所以有:$a_n = 8 * a_{n-1} + 9 * 10^{n-2}$

  設$G(x)$為生成函數,根據遞推關系,不難得到:

  $$G(x) - 8x = 8xG(x) + 9x^2(\frac{1}{1-10x})$$

  整理得:

  $$G(x) = \frac{x(8 - 71x)}{(1-8x)(1-10x)}$$

  化簡一下可以得到:

  $$G(x) = \frac{1}{2}(\frac{7x}{1 - 8x} + \frac{9x}{1 - 10x})$$

  於是得到通項公式:

  $$a_n = \frac{7 * 8^{n-1} + 9 * 10^{n-1}}{2}$$


總結:

我們可以總結一下用生成函數由遞推公式推得通項公式的步驟:

  • 設數列生成函數為$G(x) = \sum_{i=0}^{+\infty} a_ix^i$
  • 由遞推式推得$G(x)$的數值表達式
  • 將$G(x)$的數值表達式轉化成上面幾種特殊形式的式子
  • 將$x^n$的系數提出,即可得到$a_n$的通項公式

 其實上述過程也可以逆轉過來,通過數列的通項公式(生成函數)求出遞推公式,感興趣的話還可以看這篇文章:一類通過生成函數求線性遞推式的方法


免責聲明!

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



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