卡特兰数

卡特兰数相关

匿名 (未验证) 提交于 2019-12-02 23:49:02
卡特兰数 公式 1.递推式1(定义式):f(n)=sigma(f[i]*f[n-i-1])(0<=i<=n-1) 2.递推式2:f(n+1)=f(n)*(4n+2)/(n+2); f[n]=f(n-1)*(4n-2)/(n+1) 注:递推式中f(0)=1; 3.通项公式1:f(n)=C(2n,n)/(n+1); 4.通项公式2:f(n)=C(2n,n)-C(2n,n+1); 证明 博客推荐:(部分内容来自此博客) https://www.cnblogs.com/zyt1253679098/p/9190217.html 在上文提到的出栈序列的问题情景中,如果有n个元素,在平面直角坐标系中用x坐标表示入栈数,y坐标表示出栈数,则坐标(a,b)表示目前已经进行了a次入栈和b次出栈,则再进行一次入栈就是走到(a+1,b),再进行一次出栈就是走到(a,b+1)。并且,由于入栈数一定小于等于出栈数,所以路径不能跨越直线y=x 因此,题目相当于求从(0,0)走到(n,n)且不跨越直线y=x的方案数 方案数=总方案数-不合法方案数; 首先,如果不考虑不能跨越直线y=x的要求,相当于从2n次操作中选n次进行入栈,相当于从2n个位置选n个位置作为入栈时间,则方案数为C(2n,n),这是总方案数。 (卡特兰数其他公式的数学证明详见推荐的博客,~~打符号太麻烦了~~) 应用 1、一个栈(无穷大

Luogu P3200 [HNOI2009]有趣的数列

匿名 (未验证) 提交于 2019-12-02 23:49:02
题目描述 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}; (2)所有的奇数项满足a1<a3<...<a2n-1,所有的偶数项满足a2<a4<...<a2n; (3)任意相邻的两项a2i-1与a2i(1<=i<=n)满足奇数项小于偶数项,即:a2i-1<a2i。 现在的任务是:对于给定的n,请求出有多少个不同的长度为2n的有趣的数列。因为最后的答案可能很大,所以只要求输出答案 mod P的值。 输入输出格式 输入格式: 输入文件只包含用空格隔开的两个整数n和P。输入数据保证,50%的数据满足n<=1000,100%的数据满足n<=1000000且P<=1000000000。 输出格式: 仅含一个整数,表示不同的长度为2n的有趣的数列个数mod P的值。 输入输出样例 复制 3 10 复制 5 对应的5个有趣的数列分别为(1,2,3,4,5,6),(1,2,3,5,4,6),(1,3,2,4,5,6),(1,3,2,5,4,6),(1,4,2,5,3,6)。 卡特兰数。 可以在网格上模拟(以奇偶为横纵坐标),发现是 卡特兰数 的推导。 有模数,不需带高精。 现考虑怎样推: 卡特兰数四个公式:   1.h(n)=h(0)*h(n-1)+h(1)*h(n-2)+.....h(n-1)*h(0).   2.h(n)

卡特兰数相关总结

∥☆過路亽.° 提交于 2019-12-02 21:52:41
一、前置知识 在笛卡尔坐标系中,起点为 \((0,0)\) ,终点为 \((n,m)\) ,每一步只能向上或向右走的方案数为 \(C_{n+m}^n\) 。 二、基本卡特兰数 首先亮出卡特兰数的基本公式: \[Cat_n = \frac{C_{2n}^n}{n + 1}\] 那么卡特兰数有许多经典问题,我们来从最经典的入手。 例一:在平面直角坐标系中,起点为 \((0,0)\) ,终点为 \((n,n)\) ,第一步只能向上走。在之后的移动中可以向上走或向右走,但不能超出直线 \(y=x\) 。求方案数。 首先这个方案数可以表示为从(0,0)走到(n,n)的总方案数减去 至少 超出一次的方案数。 从(0,0)走到(n,n)的总方案数即为 \(C_{2n}^n\) . 现在考虑 至少 超出一次的方案数。当我们刚刚超出直线 \(y = x\) 的时候,我们一定处于直线 \(y = x - 1\) 上,把此时所在的点记为点A。现在我们做这样一件事情,把原本从点A到终点的路径围绕直线 \(y = x - 1\) 翻折,那么这条路径就变成从原点到点 \((n+1,n-1)\) 的一条路径。 我们又可以发现,所有违法的路径与所有从原点到 \((n + 1, n - 1)\) 的路径构成一一对应关系。证明极其简单,在脑子里想一下就行了。 所以 至少 超出一次的方案数就是 \(C_{(n+1)+

卡特兰数(Catalan Number)

痴心易碎 提交于 2019-12-02 03:48:56
卡特兰数(Catalan Number) 卡特兰数又称卡塔兰数2477203708名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。该数在计算机专业中比较重要,有一些具体的应用实例。这篇文章主要分三部分: 卡特兰数递归式的含义解释 卡特兰数表达式的证明过程 卡特兰数的计算机中的应用 Catalan Number递归式解释 假设h(0)=1,h(1)=1,catalan数满足递推式: h ( n ) = h ( 0 ) ∗ h ( n − 1 ) + h ( 1 ) ∗ h ( n − 2 ) + h ( 2 ) ∗ h ( n − 3 ) + . . . + h ( n − 1 ) ∗ h ( 0 ) (1.1) (1.1)h(n)=h(0)∗h(n−1)+h(1)∗h(n−2)+h(2)∗h(n−3)+...+h(n−1)∗h(0) 递归式背后有什么物理含义呢,这里以出栈序列问题进行说明: 问题描述: 一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列? 含义解释: 首先,我们设 h ( n ) h(n)=序列个数为n的出栈序列种数。(我们假定,最后出栈的元素为k,显然,k取不同值时的情况是相互独立的,也就是求出每种k最后出栈的情况数后可用加法原则,由于k最后出栈,因此,在k入栈之前,比k小的值均出栈,此处情况有 h ( k −

浅谈卡特兰数

╄→尐↘猪︶ㄣ 提交于 2019-12-01 12:38:50
卡特兰数 卡特兰数又称卡塔兰数,卡特兰数是组合数学中一个常出现在 各种计数问题中的数列 。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名。 中文名卡特兰数 外文名Catalan number 解释 出现在各种 计数问题 中出现的数列 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ... 递推式子 一 令 h(0)=1,h(1)=1 h(n)= h(0)h(n-1)+h(1)h(n-2) + ... + h(n-1)h(0) (n>=2) 二 h(n)=h(n-1)(4n-2)/(n+1) 三 h(n)=C(2n,n)/(n+1) (n=0,1,2,...) 四 h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...) 应用 例题一 题目描述: 已知一颗二叉树有n个结点,问:该二叉树能组成多少种不同的形态? 分析: 设该二叉树 左子树 有 i个结点 ,则 右子树 就有

HNOI 2009 有趣的数列

冷暖自知 提交于 2019-12-01 10:13:32
洛谷 P3200 [HNOI2009]有趣的数列 洛谷传送门 JDOJ 2130: [HNOI2009]有趣的数列 D1 T3 JDOJ传送门 Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: ​ (1)它是从1到2n共2n个整数的一个排列{ai}; ​ (2)所有的奇数项满足a1<a3<…<a2n-1,所有的偶数项满足a2<a4<…<a2n; ​ (3)任意相邻的两项a2i-1与a2i(1≤i≤n)满足奇数项小于偶数项,即:a2i-1<a2i。 ​ 现在的任务是:对于给定的n,请求出有多少个不同的长度为2n的有趣的数列。因为最后的答案可能很大,所以只要求输出答案 mod P的值。 Input 输入文件只包含用空格隔开的两个整数n和P。输入数据保证,50%的数据满足n≤1000,100%的数据满足n≤1000000且P≤1000000000。 Output 仅含一个整数,表示不同的长度为2n的有趣的数列个数mod P的值。 Sample Input 3 10 Sample Output 5 HINT 对应的5个有趣的数列分别为 (1,2,3,4,5,6), (1,2,3,5,4,6), (1,3,2,4,5,6), (1,3,2,5,4,6), (1,4,2,5,3,6)。 Source HNOI2009 最优解声明 题解:

【知识总结】卡特兰数 (Catalan Number) 公式的推导

白昼怎懂夜的黑 提交于 2019-11-30 19:43:01
卡特兰数的英文维基讲得非常全面,强烈建议阅读! Catalan number - Wikipedia (本文中图片也来源于这个页面) 由于本人太菜,这里只选取其中两个公式进行总结。 (似乎就是这两个比较常用?) 首先先扔卡特兰数的定义式 C a t a l a n n = ∏ i = 1 n − 1 C a t a l a n i ∗ C a t a l a n n − i C a t a l a n n = ∏ i = 1 n − 1 C a t a l a n i ∗ C a t a l a n n − i //--> (卡特兰数的很多应用,比如二叉树形态数,出栈序列数等,都由这个定义式得到。详见英文维基) 公式1 (通项公式) : C a t a l a n n = 1 n + 1 C n 2 n C a t a l a n n = 1 n + 1 C 2 n n //--> 在上文提到的出栈序列的问题情景中,如果有 n n //--> 个元素,在平面直角坐标系中用 x x //--> 坐标表示入栈数, y y //--> 坐标表示出栈数,则坐标 ( a , b ) ( a , b ) //--> 表示目前已经进行了 a a //--> 次入栈和 b b //--> 次出栈,则再进行一次入栈就是走到 ( a + 1 , b ) ( a + 1 , b ) //-->

神奇的组合数学——卡特兰数

别来无恙 提交于 2019-11-30 19:42:17
卡特兰数: 定义: 令 h ( 0 ) = 1 , h ( 1 ) = 1 //--> ,Catalan数满足递推式。 h ( n ) = h ( 0 ) × h ( n − 1 ) + h ( 1 ) × h ( n − 2 ) + . . . + h ( n − 1 ) × h ( 0 ) ( n ≥ 2 ) //--> 。 通项公式 : 证明如下 (摘自TAOCP的原练习题)(数竞党很少用不严格证明的定理): 解决问题: 1.括号对:合法的括号对对数答案为 h ( n ) //--> 。 2.二叉树:合法的树有答案为 h ( n ) //--> 。 3.分多边形:有 h ( n ) //--> 种分法,用这个可以简单的证明卡特兰数的通项: 不妨设 h ( i ) //--> 为 i //--> 边形的答案,明显,有 h ( i ) = h ( n ) = h ( 1 ) × h ( n − 1 ) + h ( 2 ) × h ( n − 2 ) + . . . + h ( n ) h ( 0 ) 。 //--> 又因为我们可以得到,总共的分法有 C ( n , n 2 ) //--> 个,不合法的是一个“逆序相交”,从而不合法的有: ∑ C ( n − t , t ) ∗ C ( t , 1 ) //--> 故相减可得有 所以得证(肯定有人注意到了,这个 h ( n ) //

卡特兰数组

独自空忆成欢 提交于 2019-11-30 19:41:57
接触卡特兰数组是在刷Leetcode上的95.96这两题 unique binary search tree时涉及的知识点,当时只会考虑o(n^2)时间复杂度的解法,后来在discuss中了解到,这是典型的卡特兰数的题型,通过卡特兰数组的通项公式可以得到O(n)的解法。 卡特兰数,一种有着特殊规律的数列,先用一道题来引出卡特兰数。 10 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问有多少种排列方式 ? 我们可以先把这10个人从低到高排列,然后,选择5个人排在第一排,那么剩下的5个人肯定是在第二排。 用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有5个0,5个1的序列,就对应一种方案。 比如0000011111就对应着 第一排:0 1 2 3 4 第二排:5 6 7 8 9 0101010101就对应着 第一排:0 2 4 6 8 第二排:1 3 5 7 9 所以,看到问题相应的转换为,这样的满足条件的01序列有多少个。 观察规律我们发现1的出现前边必须有一个相应的0对应,所以从左到右的所有序列中0的个数要一直不小于1的个数。那这种数列有多少种排列方式呢? 为了让问题由一个序列的考虑变成一个位置上的单元的考虑,我们可以以某个特定位置来做定位,从左往右扫描,第一次出现1的个数等于0的个数是第k位,那么在此之前,0的个数是大于1的个数的

卡特兰数Catalan

安稳与你 提交于 2019-11-30 19:41:20
1.卡特兰数的性质 其实重要的就两个公式:1和3. 公式1是卡特兰数的通项公式。 公式2是卡特兰数的递归公式。注意递推公式是C n+1 =… 通常是发现问题可以用卡特兰数的递推公式来解决,从而想到卡特兰数。 2.经典问题 1.出栈次序问题。   一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列? 解:对于每一个数来说,必须进栈一次、出栈一次。 我们把进栈设为状态‘1’,出栈设为状态‘0’ 。n个数的所有状态对应n个1和n个0组成的2n位二进制数。由于任意时刻,出栈的操作数一定不超过入栈的操作数, 因此输出序列的总数目为由左而右扫描由n个1和n个0组成的2n位二进制数中,1的累计数不小于0的累计数的方案种数。 在 2n位二进制数中填入n个1的方案数为c(2n,n) 。从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。 不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2(n-m)-1位上有n-m个1和n-m-1个0。如若把后面这2(n-m)-1位上的0和1互换,使之成为n-m个0和n-m-1个1,结果得1个由n+1个0和n-1个1组成的2n位数,即一个不合要求的数对应于一个由n+1个0和n-1个1组成的排列。 反过来,任何一个由n+1个0和n-1个1组成的2n位二进制数