Asymptotic I Catalan Number
卡特兰数出现在许多计数问题中。
常见的例子有:$n$ 个节点的有序二叉树,$2n$ 个括号构成的合法括号序列。
在上面所举的两个例子中,很容易看出卡特兰数满足递推:
$$
C_{n+1} = \sum_{i = 0}^{n} C_i C_{n-i }, \quad(n \ge 1)
$$
$C_0 = 1$
卡特兰数的闭形式,亦即上述递推式的解为
$$
C_n = \frac{1}{n+1} \binom{2n}{n} = \frac{(2n)!}{n!(n+1)!}
$$
曾经我对于如何推导这个式子很感兴趣,实际上推导过程很容易搜到,维基百科上就有。
现在我摘录一种最常见的借助生成函数的证明,以备查看。
定义 $C_n$ 的生成函数
$$
c(x) = \sum_{n = 0}^{\infty} C_n x^n
$$
为了利用上述递推关系,我们考虑 $c(x)^2$ 的幂级数展开式中 $x^n$ 项的系数
\begin{aligned}
c(x)^2 &= \sum_{n = 0}^\infty \sum_{i = 0}^{n} C_i C_{n-i} x^n \\
&= \sum_{n = 0}^\infty C_{n+1} x^n
\end{aligned}
于是有
\begin{equation}
c(x) = 1 + xc(x)^2 \label{E:1}
\end{equation}
\eqref{E:1} 是关于 $c(x)$ 的一元二次方程,解之即得 $c(x)$ 的闭形式,再将此闭形式展开即得 $C_n$ 的表达式。
解得
$$ c(x) = \frac{1 \pm \sqrt{1 - 4x}} {2x} $$
注意到 $c(x)$ 在 $x = 0$ 处的极限应为 $0$,据此可知上式中分母上应取负号,即
\begin{equation}
c(x) = \frac{1 - \sqrt{1 - 4x}} {2x} \label{E:2}
\end{equation}
现在问题归结为如何将 \eqref{E:2} 展成幂级数。
要解决这个问题,我们需要知道一个东西,那就是二项式定理的推广形式。
回忆我们所学过的二项式定理,$(x + y)^n$ 中的指数 $n$ 必须是非负整数。先哲牛顿推广了初等的二项式定理,他证明了指数可以为任意实数 $r$,二项式定理同样成立。即有
$$(x+y)^r = \sum_{k = 0}^{\infty} \binom{r}{k} x^k y ^{r-k} $$
其中
$$\binom{r}{k} = \frac{r (r-1) (r-2) \dots (r - k + 1)} {k!}$$
$r (r-1) (r-2) \dots (r - k + 1)$ 也称作「$r$ 的降 $k$ 阶乘」,记作 $(r)_k$,这种记法称作 Pochhammer 符号。
二项式定理的一般形式在物理上很有用处,我念本科时不知道这么个好东西,常常看不懂书上的一些推导过程。
借助推广的二项式定理,我们很容易写出 $\sqrt{1 - 4x}$ 的展开式
\begin{aligned}
\sqrt{1 - 4x} &= (1 - 4x)^{1/2} \\
&= \sum_{k = 0}^{\infty}\binom{1/2}{k} (-4x)^k \\
&= \sum_{k = 0}^{\infty} \frac{(-1)^{k-1}(2k-3)!!}{2^k k!} (-4x)^k \\
&= \sum_{k = 0}^{\infty} \frac{(-1)^{k-1}}{4^k (2k -1) }\frac{2^k (2k-1)!!}{k!} (-4x)^k \\
&= \sum_{k = 0}^{\infty} \frac{(-1)^{k-1}}{4^k (2k -1) } \binom{2k}{k} (-4x)^k \\
&= \sum_{k = 0}^{\infty} \frac{-1}{ 2k -1 } \binom{2k}{k} x^k
\end{aligned}
进而
\begin{aligned}
1 - \sqrt{1 - 4x} &= \sum_{k = 1}^{\infty} \frac{1}{ 2k -1 } \binom{2k}{k} x^k \\
&= \sum_{k = 0}^{\infty} \frac{1}{ 2k + 1 } \binom{2k+2}{k+1} x^{k+1} \\
&= \sum_{k = 0}^{\infty} \frac{2}{k+1} \binom{2k}{k} x^{k+1}
\end{aligned}
从而
$$ \frac{1 - \sqrt{1 - 4x}} {2x} = \sum_{k = 0}^{\infty} \frac{1}{ k+1 } \binom{2k}{k} x^k $$
因此
$$ C_n = \frac{1}{n+1} \binom{2n}{n} $$
补充
$C_n$ 还可写成
$$ C_n = \binom{2n}{n} - \binom{2n}{n + 1} $$
另外,$C_n$ 的相邻两项满足
$$ C_{n+1} = \frac{2(2n+1)}{n + 2} C_n $$
Asymptotic I Catalan Number的更多相关文章
- 卡特兰数(Catalan Number) 算法、数论 组合~
Catalan number,卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡特兰数的前几个数 前20项为( ...
- 浅谈卡特兰数(Catalan number)的原理和相关应用
一.卡特兰数(Catalan number) 1.定义 组合数学中一个常出现在各种计数问题中出现的数列(用c表示).以比利时的数学家欧仁·查理·卡特兰的名字来命名: 2.计算公式 (1)递推公式 c[ ...
- 卡特兰数 catalan number
作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...
- 【知识总结】卡特兰数 (Catalan Number) 公式的推导
卡特兰数的英文维基讲得非常全面,强烈建议阅读! Catalan number - Wikipedia (本文中图片也来源于这个页面) 由于本人太菜,这里只选取其中两个公式进行总结. (似乎就是这两个比 ...
- Lucas定理 & Catalan Number & 中国剩余定理(CRT)
又双叒叕来水数论了 今天来学习\(Lucas \:\ \& \:\ Catalan Number\) 两者有着密切的联系(当然还有CRT),所以放在一起学习一下 \(Lucas\) 定义\(\ ...
- Catalan Number 卡特兰数
内容部分来自以下博客: Cyberspace_TechNode 邀月独斟 一个大叔 表示感谢! Catalan数的引入: 一个长度为2N的序列,里面有N个+1,N个-1 它的任意前缀和均非负,给定N, ...
- 卡特兰数(Catalan Number) 学习笔记
一.三个简单的问题 1.给定一串长为2n的01序列,其中0和1的数量相等,满足任意前缀中0的个数不少于1的个数,求序列的个数 2.给出一串长为n的序列,按顺序将他们进栈,随意出栈,求最后进出栈的方案 ...
- 浅谈 Catalan number——卡特兰数
一.定义: 卡特兰数是一组满足下面递推关系的数列: 二.变形: 首先,设h(n)为Catalan数的第n+1项,令h(0)=1,h(1)=1,Catalan数满足递推式: h(n)= h(0)*h(n ...
- catalan number
http://blog.csdn.net/yutianzuijin/article/details/13161721
随机推荐
- Windows/Linux下查看系统CPU使用最高的线程
参考:https://blog.csdn.net/qq_27818157/article/details/78688580 jstack -l 31372 > c:/31372.stack
- C-net总结
SMB服务器信息块 DHCP动态主机配置协议 STMP简单邮件传输协议 POP(邮件协议) Gnutella 网络分析数据 nslookup DNS(域名系统) 请求注释(RFC)文件 ...
- JavaScript的变量命名规则和关键字的介绍
变量的名字 就像 人的名字一样,不能乱起. 你的代码不是只有你一个人看,变量既然是名字,那就这个名字就要有特殊的意义: 举个栗子:翠花,我们能从这个名字中得到什么信息?(这个 ...
- Linux用户与组管理命令
1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可. who | cut -d" " -f1 | sort -u 或 who | cut -d ...
- flask-login原理详解
最近发现项目中使用的flask-login中有些bug,直接使用官网的方式确实可以用,但仅仅是可以用,对于原理或解决问题没有什么帮助,最近通过查看网上资料.分析源码.通过demo.从零开始总结了fla ...
- 利用pandas和numpy计算表中每一列的均值
import numpy as np import pandas as pd df = pd.DataFrame({'var1':np.random.rand(100), #生成100个0到1之间的随 ...
- Oozie 之 sqoop 实战
1.创建 lib 目录并拷贝 mysql 支持包 2.修改 job.properties 文件 nameNode=hdfs://cen-ubuntu.cenzhongman.com:8020 jobT ...
- P2680 运输计划(二分+树上差分)
P2680 运输计划 链接 分析: 二分+树上差分. 首先可以二分一个答案,那么所有比这个答案大的路径,都需要减去些东西才可以满足这个答案. 那么减去的这条边一定在所有的路径的交集上. 那么如果求快速 ...
- ACE handle_timeout 事件重入
当多线程运行反应器事件时, 注意handle_timeout会重入,单独线程不存在下列问题! 1. 一个timer事件 // test_ace_timer.cpp : Defines the entr ...
- Postman-进阶(2)
Postman-进阶(2) Postman-简单使用 Postman-进阶使用 Postman-CI集成Jenkins 管理请求 保存请求-添加“打开百度首页请求” 设置请求方式为Get,地址为www ...