卡特兰数
2022/9/3 23:26:34
本文主要是介绍卡特兰数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
卡特兰数,一个特殊的数列。通项公式为:
\[Cat_n=\frac {C_{2n}^n}{n+1} \]从\(0\)开始的前几项为:\(1,1,2,5,14,42,132,\cdots\),所以有的题可以直接打个表看看(比如这个)
然后是它是怎么推出来的,最主要的就是从\((0,0)\)到\((n,n)\)不穿过直线\(y=x\)的路径计数(不想上图了,可以手画一个)。首先我们随便走的走法就是\(2n\)步里面选\(n\)步向上剩下\(n\)步向右,就是\(C_{2n}^n\)。
然后减去不合法的方案数。我们发现,如果穿过直线\(y=x\),那必然接触直线\(y=x+1\)。然后我们把第一个接触点之后向右和向上的走法反转,那么它就会走到\((n-1,n+1)\),走法数显然是\(C_{2n}^{n+1}\)。于是一个公式就是
\[Cat_n=C_{2n}^n-C_{2n}^{n+1} \]还有一些其他的公式:
\[Cat_n=\frac {Cat_{n-1}(4n-2)}{n+1} \]\[Cat_n=\sum_{i=1}^nCat_{i-1}Cat_{n-i}(n\ge 2) \]最后是一些常用的卡特兰数模型:
- 一个\(01\)串,\(n\)个\(0n\)个\(1\)。使任意前缀中\(0\)的个数不小于\(1\)的个数的方案数为\(Cat_n\)。
- \(n\)个点的有标号二叉树的个数为\(Cat_n\)。
- 一个栈的进栈序列为\(1,2,\cdots n,\)则不同的出栈序列个数为\(Cat_n\)。
- 圆上\(2n\)个点,用\(n\)条线段成对连接,不相交的方案数为\(Cat_n\)。
- 将一个凸多边形剖分成\(n\)个三角形的方案数为\(Cat_n\)。
这篇关于卡特兰数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署
- 2024-04-14RAG应用开发实战02-相似性检索的关键 - Embedding