Siyuan

「算法笔记」生成函数求数列通项公式
「算法笔记」生成函数求数列通项公式
扫描右侧二维码阅读全文
27
2019/06

「算法笔记」生成函数求数列通项公式

利用生成函数,可以求解数列的通项公式。本文以「斐波那契数列」为例。


前置知识

斐波那契数列

$$ f_n = \begin{cases} 0 & n = 0 \\ 1 & n = 1 \\ f_{i - 1} + f_{i - 2} & n > 1 \end{cases} $$

普通生成函数基本公式

众所周知生成函数中显然有 $x \in (-1, 1)$ 即函数收敛:

$$ \frac{1}{1 - x} = \sum_{i = 0} ^ {\infty} x ^ i $$

我们将 $kx$ 替换 $x$ 得到:

$$ \frac{1}{1 - kx} = \sum_{i = 0} ^ {\infty} k ^ i x ^ i $$


解法

我们构造 $f(x)$ 的生成函数 $F(x) = \sum_{i = 0} ^ {\infty} f(i) \cdot x ^i$:

$$ \begin{align*} F(x) & = & 0x ^ 0 + 1x + 1x ^ 2 + 2x^ 3 + 3x ^ 4 + 5x ^ 5 + \dots \\ xF(x) & = & 0x + 1x ^ 2 + 1x ^ 3 + 2x ^ 4 + 3x ^ 5 + \dots \\ x ^ 2 F(x) & = & 0x ^ 2 + 1x ^ 3 + 1x ^ 4 + 2x ^ 5 + \dots \end{align*} $$

那么有:

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

由于 $\frac{1}{1 - kx} = \sum_{i = 0} ^ {\infty} k ^ i x ^ i$,那么我们尝试把 $F(x)$ 裂项为如下形式:

$$ \frac{x}{1 - x - x ^ 2} = \frac{A}{1 - \phi_1 x} + \frac{B}{1 - \phi_2 x} $$

列出方程:

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

再列出方程:

$$ A(1 - \phi_2 x) + B(1 - \phi_1 x) = x \\ (A + B) - (A \phi_2 + B \phi_2 + 1)x = 0 \\ A = \frac{1}{\sqrt 5}, B = -\frac{1}{\sqrt 5} $$

故我们得到生成函数的具体形式:

$$ \begin{align*} F(x) = \frac{x}{1 - x - x ^ 2} & = \frac{1}{\sqrt 5}\left(\frac{1}{1 - \phi_1 x } - \frac{1}{1 - \phi_2 x}\right) \\ & = \frac{1}{\sqrt 5}\left(\sum_{i = 0} ^ {\infty} \phi_1 ^ i x ^ i - \sum_{i = 0} ^ {\infty} \phi_2 ^ i x ^ i\right) \\ & = \sum_{i = 0} ^ {\infty} \frac{\phi_1 ^ i - \phi_2 ^ i}{\sqrt 5} x ^ i \end{align*} $$

于是我们得到了斐波那契数列的通项公式:

$$ \begin{align*} f_n & = \frac{1}{\sqrt 5}(\phi_1 ^ n - \phi_2 ^ n) \\ & = \frac{1}{\sqrt 5}\left(\left(\frac{1 + \sqrt 5}{2}\right) ^ n - \left(\frac{1 - \sqrt 5}{2}\right) ^ n\right) \end{align*} $$

最后修改:2019 年 06 月 27 日 08 : 35 PM

2 条评论

  1. Mkozex

    计数神仙 Siyuan!

  2. LMOliver

    计数大师 Siyuan !

发表评论