斐波那契数列
斐波那契数列的定义与基本性质
历史背景 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
定义 斐波那契数列 \(F_n\) 有递推定义
列举参照
性质1 \(\displaystyle \sum_{i=1}^n F_i = F_{n+2} -1\) 。
性质2 \(\displaystyle \sum_{i=1}^n F_{2i-1} = F_{2n}\) 。
性质3 \(\displaystyle\sum_{i=1}^n F_{2i} = F_{2n+1}-1\) 。
性质4 \(\displaystyle \sum_{i=1}^n F_{i}^2 = F_{n}F_{n+1}\) 。
性质5 \(\displaystyle F_{n+m} = F_{n-1}F_{m-1}+F_nF_m\) 。
性质6 \(F_n^2 = (-1)^{n-1} + F_{n-1}F_{n+1}\) 。
性质7 \(F_{2n-1} = F_n^2 - F_{n-2}^2\) 。
性质8 \(F_n = \dfrac{F_{n-2}+F_{n+2}}{3}\) 。
性质9 \(\lim\limits_{n\to\infty} \dfrac{F_{n+1}}{F_n} = \dfrac{\sqrt{5}-1}{2}\) 。
性质10 \(F_n = \dfrac{\left(\dfrac{1+\sqrt5}{2} \right)^n - \left(\dfrac{1-\sqrt5}{2} \right)^n}{\sqrt 5}\) 。
卡特兰数
卡特兰数的定义与基本性质
历史背景 卡特兰数(Catalan number),又称卡塔兰数、明安图数,是组合数学中一种常出现于各种计数问题中的数列。以比利时的数学家欧仁·查理·卡特兰的名字来命名。1730年左右被蒙古族数学家明安图使用于对三角函数幂级数的推导而首次发现,1774年被发表在《割圜密率捷法》。
定义 卡特兰数 \(H_n\) 有递推定义
列举参照
性质1 \(H_n = \dfrac{1}{n+1} \dbinom{2n}{n}\) 。
性质2 \(H_n = \dbinom{2n}{n} - \dbinom{2n}{n-1}\) 。
性质3 \(H_n = \dfrac{4n-2}{n+1}H_{n-1}\) 。
性质1的证明:
我们设卡特兰数的生成函数为 \(\displaystyle G(x) = \sum_{i=0}^\infty H_ix^i\) ,可得
\[\begin{aligned} G^2(x) &= H_0^2 + (H_0H_1+H_1H_0)x + (H_0H_2 + H_1^2 + H_2H_0)x^2 + \cdots \\ &= H_1 + H_2x + H_3x^2 + \cdots \\ \end{aligned} \]于是有 \(xG^2(x) - G(x) + 1 = 0\) ,解得 \(G(x) = \dfrac{1-\sqrt{1-4x}}{2x}\) 并且 \(G(0) = 1,\lim_\limits{x\to 0} G(x) = 1\) 。
我们对 \(G(x)\) 在 \(x = 0\) 处泰勒展开 \(\displaystyle (1+x)^\alpha = \sum_{i=0}^\infty \binom{\alpha}{i}x^i\) ,有
\[\begin{aligned} G(x) &= \frac{1}{2x} \sum_{i=1}^\infty (-1)\binom{1/2}{i}(-4x)^i \\ &= \frac{1}{2x} \sum_{i=1}^\infty (-1)\frac{(1/2)(1/2-1)\cdots(1/2-i+1)}{i!} (-4x)^i \\ &= \frac{1}{2x} \left( 1+\sum_{i=2}^\infty \frac{(2i-3)!!}{i!} (2x)^i \right) \\ &= \frac{1}{2x} \left( 1+\sum_{i=2}^\infty \frac{(2i-2)!}{i! \cdot 2 \cdots (2i-2)} (2x)^i \right) \\ &= \frac{1}{2x} \sum_{i=1}^\infty \frac{(2i-2)!}{i! \cdot (i-1)!} x^i \\ &= \frac{1}{2x} \sum_{i=0}^\infty \frac{(2i)!}{(i+1)! \cdot i!} x^{i+1} \\ &= \sum_{i=0}^\infty \frac{1}{i+1} \frac{(2i)!}{i! \cdot i!} x^{i} \\ &= \sum_{i=0}^\infty \frac{1}{i+1} \binom{2i}{i} x^{i} \\ \end{aligned} \]综上,根据 \(G(x)\) 的 \(x^n\) 系数可得 \(H_n = \dfrac{1}{n+1} \dbinom{2n}{n}\) 。
性质2的证明:
由性质1可得,\(H_n = \dfrac{1}{n+1} \dbinom{2n}{n} = \dbinom{2n}{n} - \dfrac{n}{n+1} \dbinom{2n}{n} = \dbinom{2n}{n} - \dbinom{2n}{n-1}\) 。
性质3的证明:
由性质1可得, \(H_n = \dfrac{1}{n+1} \dbinom{2n}{n} = \dfrac{1}{n+1} \dfrac{(2n)!}{n!n!} = \dfrac{4n-2}{n+1} \dfrac{1}{n} \dfrac{(2n-2)!}{(n-1)!(n-1)!} = \dfrac{4n-2}{n+1} H_{n-1}\) 。
卡特兰数的应用
这里只列举了几个经典的情况,还有许多就不一一列举了,解释都是大同的。
这些问题的共同点就是,有具有前缀限制的两种操作,或可以划分为多个子问题的和。
满足通项关系的情况
-
网格图路径
在 \(n \times n\) 的网格图中,从 \((0,0)\) 走到 \((n,n)\) ,满足每次可以向上或向右走一格,且任意时刻向右次数不少于向上次数的路径方案数。
方法:
限制可理解为不能越过(可以碰到)直线 \(y=x\) 的方案数。
不考虑 \(y=x\) 的限制,共有 \(\dbinom{2n}{n}\) 种方案。
考虑不合法的方案,即越过 \(y=x\) 的方案,等价于碰到 \(y = x+1\) 的方案。每个不合法的方案,找到其碰到 \(y = x+1\) 的第一个交点,将此之后的路径沿 \(y=x+1\) 对称翻折,会得到唯一对应的一条 \((0,0)\) 到 \((n-1,n+1)\) 的路径。同时对于 \((0,0)\) 到 \((n-1,n+1)\) 的每条路径,也可以找到第一个与 \(y=x+1\) 的交点,将此之后的路径沿 \(y=x+1\) 对称翻折,也会得到唯一对应的一条 \((0,0)\) 到 \((n,n)\) 的不合法的路径。
综上, \((0,0)\) 到 \((n,n)\) 的不合法路径和 \((0,0)\) 到 \((n-1,n+1)\) 的路径是一一对应的,因此 \((0,0)\) 到 \((n,n)\) 的合法路径方案数为 \(H_n = \dbinom{2n}{n} - \dbinom{2n}{n-1}\) 。
当 \(y = x + k\) 时,可以同样分析。
-
括号匹配
有 \(n\) 个左括号和 \(n\) 个右括号,求长度为 \(2n\) 的合法括号序列个数。
方法:
限制是任意前缀序列中,左括号个数不少于右括号个数。
可以同网格图路径中的方法类似,翻折操作变成左右括号互换。
-
不相交弦问题
一个圆周上有 \(2n\) 个点,两两配对并在两点间连一条弦,要求所连的 \(n\) 条弦没有交点,求有多少种配对数。
方法:
我们规定逆时针方向为正,从其中一个点开始,限制是任意前缀序列中,左端点个数不少于右端点个数。
可以同网格图路径中的方法类似,翻折操作变成左右端点互换。
-
出栈序列
一个栈(无穷大)的进栈序列为 \(1,2,\cdots ,n\) 有多少个不同的出栈序列?
方法:
同括号匹配。
满足递推关系的情况
-
阶梯矩形的矩形划分数
求 \(n\) 层矩形阶梯分为 \(n\) 个矩形的方案数。
-
凸多边形的三角划分
一个凸的 \(n+2\) 边形,用 \(n-1\) 条直线连接它的两个顶点使之分成 \(n\) 个三角形,每条直线不能相交,求划分方案数。
-
二叉树计数
二叉树有 \(n\) 个节点,求不同的二叉树的个数。