卡特兰数通项公式详细推导过程

本文详细介绍了卡特兰数的递归式,并通过生成函数法求解出其通项公式。利用牛顿二项式定理进行展开,最终得出卡特兰数的通项公式为P(n)=n+1/(2n),对于n≥0的情况,P(0)=1。

设法求解下面这个递归式或给出其最低上界的阶,设P(1)=1P(1)=1P(1)=1
P(n)=∑k=1n−1P(k)P(n−k) P(n)=\sum^{n-1}_{k=1}P(k)P(n-k) P(n)=k=1n1P(k)P(nk)


易知P(n)P(n)P(n)就是卡特兰数,下面用生成函数法求解出其通项公式。

设生成函数为:
g(x)=h(1)x+h(2)x2+...+h(k)xk+... g(x)=h(1)x+h(2)x^2+...+h(k)x^k+... g(x)=h(1)x+h(2)x2+...+h(k)xk+...
g(x)g(x)g(x)与自身相乘,得:
[g(x)]2=h(1)2x2+[h(1)h(2)+h(2)h(1)]x3+...+[h(1)h(k−1)+h(2)h(k−2)+...+h(k−1)h(1)]xk+... [g(x)]^2=h(1)^2x^2+[h(1)h(2)+h(2)h(1)]x^3+... \\ +[h(1)h(k-1)+h(2)h(k-2)+...+h(k-1)h(1)]x^k+... [g(x)]2=h(1)2x2+[h(1)h(2)+h(2)h(1)]x3+...+[h(1)h(k1)+h(2)h(k2)+...+h(k1)h(1)]xk+...
P(n)P(n)P(n)的递归式带入,得:
[g(x)]2=h(2)x2+h(3)x3+...+h(k)xk=g(x)−h(1)x⇒[g(x)]2−g(x)+x=0⇒g1(x)=1+1−4x2,g2(x)=1−1−4x2 [g(x)]^2=h(2)x^2+h(3)x^3+...+h(k)x^k=g(x)-h(1)x \\ \Rightarrow [g(x)]^2-g(x)+x=0\\ \Rightarrow g_1(x)=\frac{1+\sqrt{1-4x}}{2},g_2(x)=\frac{1-\sqrt{1-4x}}{2} [g(x)]2=h(2)x

卡特兰公式是组合学中的经典内容,可以过多种方式推导得到。以下是卡特兰的几个等价表达式: ### 卡特兰公式 1. 最常见的形式是基于二式系的表示: $$ C_n = \frac{1}{n+1} \binom{2n}{n} $$ 其中 $ \binom{2n}{n} $ 是从 $ 2n $ 个元素中选择 $ n $ 个元素的组合。 2. 另一个等价的表达式是: $$ C_n = \binom{2n}{n} - \binom{2n}{n-1} $$ 这表示从 $ 2n $ 个元素中选择 $ n $ 个元素的组合减去选择 $ n-1 $ 个元素的组合,其差值即为第 $ n $ 个卡特兰 [^1]。 3. 卡特兰也可以过递推公式表示: $$ C_0 = 1, \quad C_n = \frac{2(2n-1)}{n+1} C_{n-1} $$ 这个递推关系使得可以过前一个卡特兰快速计算出当前值 。 ### 推导方法 卡特兰推导可以过不同的方法实现,以下是基于组合推导过程1. **组合形式的推导**: - 首先明确目标公式: $ C_n = \frac{1}{n+1} \binom{2n}{n} $。 - 将组合 $ \binom{2n}{n} $ 表示为乘形式: $ \frac{(2n)!}{n!n!} $。 - 提取公因式 $ \frac{(2n)!}{n!(n-1)!} $,并将其与 $ \left( \frac{1}{n} - \frac{1}{n+1} \right) $ 相乘。 - 分后可以配凑出目标公式 $ \frac{1}{n+1} \frac{(2n)!}{n!n!} $,即 $ \frac{1}{n+1} \binom{2n}{n} $ [^2]。 2. **折线法的几何推导**: - 使用几何方法,考虑从原点 $ (0, 0) $ 到点 $ (n, n) $ 的路径,其中每一步只能向右向上。 - 合法路径不能越过对角线 $ y = x $,而非法路径可以过对称变换转换为从原点到 $ (n-1, n+1) $ 的路径。 - 合法路径等于总路径减去非法路径,即 $ \binom{2n}{n} - \binom{2n}{n-1} $,从而得到卡特兰 [^1]。 ### 示例代码 以下是一个计算卡特兰的 Python 示例: ```python def catalan_number(n): # 计算组合 C(2n, n) def comb(n, k): from math import comb return comb(2 * n, n) return comb(n, n) // (n + 1) # 计算前10个卡特兰 for i in range(10): print(f"C_{i} = {catalan_number(i)}") ``` ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值