Catalan数以及相关性质的证明
\(Catalan\) 数相关证明
- Mushroom
- 2021-5-14
\(Catalan\)数的定义
给定一个凸\(n + 1\)边形, 通过在内部不相交的对角线,把它划分成为三角形的组合,不同的划分方案的个数称为\(Catalan\)数,记作\(h_n\)
比如说正对于五边形的\(Catalan\)数\(h_4\),可以可视化为下面的形式。
递推定义
分析
\(Catalan\)数的定义是描述一个凸多边形被不相交的直线分割为三角形的方案数,记这样一件事为\(A\)
id1(创建确定一条边A1Ak+1)
id2(确定一个点B在上述边已经占用的其他边里面)
id1 --> id2
id4(左右两边的Catalan数的乘积是其整体的组合数)
id2 --> id4
id4 --> id2
注意在这个解决\(A\)事件过程中,只需要定一条边就可以了,这是由于其他的边会由\(\sum_{l=1}^{n-1}h_kh_{n-k}\)遍历得到,如果此时选择所有边,就会导致算出出现重复
依据递推方程求解\(Catalan\)数的解
牛顿二项式定理
\(\forall\)\(\alpha\) \(\in R\),且\(0 \leq |x| \leq |y|\),那么有:
\[(x + y)^a = \sum_{k = 0}^{\infty}\begin{pmatrix}\alpha \\ k\end{pmatrix}x^ky^{a-k}\\
\begin{pmatrix}
\alpha\\
k
\end{pmatrix} = \frac{\alpha(\alpha - 1)(\alpha -2) \dots(\alpha -k + 1)}{k!}
\]
现在计算\((1 + x)^{\frac{1}{2}}\)的展开式
(1 + x)^{\frac{1}{2}} = & \sum_{k=0}^{\infty}\frac{\frac{1}{2}(\frac{1}{2} - 1)(\frac{1}{2} -2)\dots (\frac{1}{2} - k + 1)}{k!}x^k
\\&=1 + \sum_{k = 1}^{\infty}\frac{(-1)^{k - 1}1 \cdot3\cdot5\dots(2k - 3)}{2^kk!}x^k
\\&=1 + \sum_{k=1}^{\infty}\frac{(-1)^{k-1}(2k-2)!}{2^kk!\cdot2^{k-1}(k-1)!}x^k
\\&=1 + \sum_{k=1}^{\infty}\frac{(-1)^{k-1}}{2^{2k-1}k}\begin{pmatrix}2k -2 \\ k-1\end{pmatrix}x^k
\end{aligned}
\]
\(Catalan\)数证明
设\(H(x)\)是\(Catalan\)数的生成函数
那么
\]
两边平方
H^2(x) =& \sum_{n = 1}^{\infty}h_nx^n\sum_{k = 1}^{\infty}h_kx^k
\\=&\sum_{n=1}^{\infty}\sum_{k=1}^{\infty}h_nh_kx^{n+k}
\\=&\sum_{n=2}^{\infty}x^n\sum_{k=1}^{n-1}h_kh_{n-k}
\end{aligned}
\]
由于
\]
所以
\]
使用二次函数的求解得出
由于\(H(0) = 0\),过滤得出的解,故
\]
由于牛顿二项式展开定理
(1 - 4x)^{\frac{1}{2}} &= 1 + \sum_{k=1}^{\infty}\frac{(-1)^{k-1}}{2^{2k-1}k}\begin{pmatrix}2k -2 \\ k-1\end{pmatrix}(-4x)^k
\\&
\end{aligned}
\]
带入上式\((1)\)
H(x) &= \sum_{n=1}^{\infty}\frac{(-1)^n}{n2^{2n}}\begin{pmatrix}2n -2 \\ n -1\end{pmatrix}(-1)^nx^{2n}x^n
\\&=\sum_{n=1}^{\infty}\frac{1}{n}\begin{pmatrix}2n -2 \\ n - 1\end{pmatrix}x^n
\end{aligned}
\]
故
\]
Python
代码
import time
def combinatorial_number(m: int, n: int) -> int:
'''
:param n: 下标
:param m: 上标
:return: 返回组合数
'''
begin = n - m + 1
if m != 0:
result: int = int(factorial(begin=begin, end=n) / factorial(end=m))
else:
result: int = 1
return result
pass
def factorial(end: int, begin: int = 1) -> int:
result: int = begin
if end != 0:
for i in range(begin, end):
result *= i + 1
else:
result = 1
return result
pass
def catalan(num: int) -> int:
return int (combinatorial_number(n = 2 * num - 2, m = num - 1) / num)
t1 = time.time()
for i in range(1, 11):
print("h{} = ".format(i), catalan(i))
t2 = time.time()
print("一共所花时间是{}".format(t2 - t1))
h1 = 1
h2 = 1
h3 = 2
h4 = 5
h5 = 14
h6 = 42
h7 = 132
h8 = 429
h9 = 1430
h10 = 4862
一共所花时间是0.0005903244018554688
PS
后续的一些应用场景以及性质会在慢慢更新的!!
Catalan数以及相关性质的证明的更多相关文章
- Catalan数以及使用Raney引理证明
一.Catalan数性质 1.1 令h(0)=1,h(1)=1,catalan数满足递推式: h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) ...
- [总结]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...
- [自用]多项式类数学相关(定理&证明&板子)
写在前面 由于上一篇总结的版面限制,特开此文来记录 \(OI\) 中多项式类数学相关的问题. 该文启发于Miskcoo的博客,甚至一些地方直接引用,在此特别说明:若文章中出现错误,烦请告知. 感谢你的 ...
- [总结]多项式类数学相关(定理&证明&板子)
目录 写在前面 前置技能 多项式相关 多项式的系数表示 多项式的点值表示 复数相关 复数的意义 复数的基本运算 单位根 代码相关 多项式乘法 快速傅里叶变换 DFT IDFT 算法实现 递归实现 迭代 ...
- [总结]其他杂项数学相关(定理&证明&板子)
目录 写在前面 一类反演问题 莫比乌斯反演 快速莫比乌斯变换(反演)与子集卷积 莫比乌斯变换(反演) 子集卷积 二项式反演 内容 证明 应用举例 另一形式 斯特林反演 第一类斯特林数 第二类斯特林数 ...
- KMP (next数组的性质及证明)
性质:如果len%(len-next[len-1])==0,则字符串中必存在最小循环节,且循环次数即为len/(len-next[len-1]); 证明:在前len个字符组成的字符串,存在最小循环节k ...
- [自用]数论和组合计数类数学相关(定理&证明&板子)
0 写在前面 本文受 NaVi_Awson 的启发,甚至一些地方直接引用,在此说明. 1 数论 1.0 gcd 1.0.0 gcd $gcd(a,b) = gcd(b,a\;mod\;b)$ 证明:设 ...
- zoj 1562 反素数 附上个人对反素数性质的证明
反素数的定义:对于不论什么正整数,其约数个数记为.比如,假设某个正整数满足:对随意的正整 数.都有,那么称为反素数. 从反素数的定义中能够看出两个性质: (1)一个反素数的全部质因子必定是从2開始的连 ...
- Java String的相关性质分析
引言 String可以说是在Java开发中必不可缺的一种类,String容易忽略的细节也很多,对String的了解程度也反映了一个Java程序员的基本功.下面就由一个面试题来引出对String的剖析. ...
随机推荐
- Dart简明教程
[前言]Dart语言是使用flutter框架开发时候必备的语言,flutter是一个跨平台的框架,一套代码就可以完美实现安卓和ios两个平台,适配也很不错,Dart语言很友好,和java很类似,学习成 ...
- 前后端(PHP)使用AES对称加密
前端代码: // 这个是加密用的 function encrypt(text){ var key = CryptoJS.enc.Utf8.parse('1234567890654321'); //为了 ...
- c/s应用程序自动更新组件GeneralUpdate3.2.1发布
一.组件简介 GeneralUpdate是基于.net standard 开发的一款(c/s应用)自动升级程序.该组件将更新的核心部分抽离出来方便应用于多种项目当中目前适用于wpf,控制台应用,win ...
- 【MCU】国民N32固件库移植
目录 前言 移植N32Gxxx系列要点 前言 链接: 李柱明博客 移植AT32库&FreeRTOS教程 由于大部分国产MCU移植固件库.RTOS源码都是差不多的,所以本文不讲细节,如想熟悉移植 ...
- 【linux】系统编程-8-Socket
目录 前言 11. 套接字 11.1 Socket简介 11.2 socket() 11.3 bind() 11.4 connect() 11.5 listen() 11.6 accept() 11. ...
- Web 前端 - 浅谈外部手动控制 Promise 状态
前言 当有多个共享资源.协同操作的时候,往往需要根据动态亦或是复杂的条件以控制和调用程序逻辑. 还是那句话,懂的人自然懂,不懂的人也搜不到这个随笔. 设计 PendingPromise<T> ...
- 1,turicreate入门 - jupyter & turicreate安装
turicreate入门系列文章目录 1,turicreate入门 - jupyter & turicreate安装 2,turicreate入门 - 一个简单的回归模型 3,turicrea ...
- mysql大于当前时间置顶并按升序排序,小于当前时间的置尾并按降序排序
现在用id来代替时间这样好测试 看一下测试表数据 执行按需求规则排序的sql SELECT * FROM number_generator ORDER BY id < 16 , IF(id &l ...
- 可读性友好的JavaScript:两个专家的故事
每个人都想成为专家,但什么才是专家呢?这些年来,我见过两种被称为"专家"的人.专家一是指对语言中的每一个工具都了如指掌的人,而且无论是否有帮助,都一定要用好每一点.专家二也知道每一 ...
- No_leak(ret2ROP + 低字节改写到syscall)
No_leak 有这种题,题目很短小,只有一个read函数,没有输出函数,这样的题怎么解呢?当然首先想到的是ret2dl,但是那个有点儿复杂.下面我来介绍一种简单的解法. 代码如下: //gcc 1. ...