The Cattleya number is also called card The Catalan number 2477203708 is a series of numbers that often appear in various counting problems in combinatorics. This number is more important in computer science, and there are some specific application examples. This article is mainly divided into three parts:
- The explanation of the meaning of the recursive expression of Cattelan numbers
- The proof process of Cattelan number expressions
- Cattelan The application of the number in the computer
Catalan Number recursive interpretation
Assuming h(0)=1, h(1 )=1, the catalan number satisfies the recurrence formula:
“>h(n)=h(0)∗h(n− 1)+h(1)∗h(n−< span id="MathJax-Span-35" class="mn">2)+h(2)∗h
What is the physical meaning behind the recursion? Here is the problem of the stack sequence:
Problem description:A stack ( Infinity) push sequence is 1, 2, 3,…, n, how many different pop sequence are there?
Meaning explanation:First, we set “>h(n)< /span>h(n)=The number of pop sequences with sequence number n. (We assume that the last element popped from the stack is k. Obviously, the conditions when k takes different values are independent of each other, that is, the addition principle can be used after the number of cases where each k is finally popped from the stack. Since k is finally popped from the stack, Therefore, before k is put on the stack, the values smaller than k are all popped out of the stack, here is the case “> h(k−1) h(k−1), and then the value greater than k is stacked, And they are all popped before k, so there is “>h(n−k)∗h (k−1) span> h(n−k)∗h(k−1), the sum is Catalan recursion.
Catalan Number expression proof
The nth Cattleya number h (n) The expression is as follows
“>h(n< span id="MathJax-Span-113" class="mo">)=Cn2nn+1=Cn2 n−Cn−12n
The specific certification process is as follows
In order to facilitate programming To achieve, the relationship between h(n) and h(n-1) needs to be further derived
It is known that “>h(n)h(n), Easy to know
“>< span id="MathJax-Span-158" class="mrow">h(n−1)=Cn−12n−2n span>
Deduction “>h(n ) h(n)’s “> C n2n C2nn and “>h(n−1)h(n −1) of “>Cn−12n−2< /span>C2n−2n The relationship between −1 is determined by
“>n∗Cn< span id="MathJ ax-Span-261" class="texatom">2n< span id="MathJax-Span-289" class="msubsup">Cn2nCn2nCn 2nCn2nn+1h(n)=2nCn−12n−1=2Cn−12n−1 =2(2n−1)C n−12n−2n=2(2n−1)h(n−1)= 2(2n−1 )n+1h(n−1)=< span id="MathJax-Span-443" class="mfrac"> 2(2n−1)n+1h(n−1)(1)(2)(3)(4)(5)(6)
(1)n∗C2nn=2nC2n−1n−1(2)C2nn=2C2n−1n−1(3)C2nn=2(2n−1)C2n−2n−1n(4)C2nn=2(2n−1)h(n−1)(5)C2nnn+1=2(2n−1)n+1h(n−1)(6)h(n)=2(2n−1)n+1h(n−1) “> “> “> “> “> “>h(n)h(n)和 “>h(n−1) span>h(n−1)之间的递归式 “>h(n)=2(2n−1)n+1h(n−1)h(n)=2(2n−1)n+1h(n−1)
最终得到
Catalan Number应用实例
括号匹配问题
问题描述: 矩阵连乘 “>P=A1A2...AnP=A1A2…An,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,问有几种括号化的方案?
问题转换一下就是n对括号的正确匹配方案,可以做一下LeetCode-22
出栈次序问题
问题描述: 一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?
出栈问题问题正是卡特兰数递归式 “>h(n)=h(0)h(n−1)+h(1)h(n−2)+...+h(n−1)h(0)h(n)=h(0)h(n−1)+h(1)h(n−2)+…+h(n−1)h(0)的由来
相关应用问题
-
有2n个人排成一行进入剧场,入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零? (将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)
-
n个1和n个0组成一个2n位的二进制数,要求从左到右扫描,0的累计数不小于1的累计数,求满足条件的的数。
-
12个人排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排。对问题进行转化:用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有6个0,6个1的序列,并且任意前缀中0的个数大于等于1的个数就对应一种方案,转化后的问题就是问题2了。
-
给定节点组成二叉树的问题:给定n个节点,能构成多少种形状不同的二叉树?
先取一个点作为顶点,然后左边依次可以取0至n-1个相对应的,右边是n-1到0个,两两配对相乘,就是
h ( 0 ) ∗ h ( n − 1 ) + h ( 2 ) ∗ h ( n − 2 ) + . . . + h ( n − 1 ) h ( 0 ) = h ( n ) “>h(0)∗h(n−1)+h(2)∗h(n−2)+...+h(n−1)h(0)=h(n) h(0)∗h(n−1)+h(2)∗h(n−2)+…+h(n−1)h(0)=h(n)能构成
h ( n ) “>h(n)h(n)个,因此二叉树问题也可以解释卡特兰数递归式(1.1)式的由来
-
n*n棋盘从左下角走到右上角而不穿过主对角线的走法?
要从左下角走到右上角则必须向上走n步,向右n步,同时为了不跨过主对角线,则走过的步数中向上走的步数必须大于等于向右走的步数,剖析之后发现这个问题与问题3是等价问题,走法有卡特兰数
h ( n ) “>h(n)h(n)种。
可以做一下下面两题练练手:
hdoj2067-小兔的棋盘
LeetCode62-Unique Paths
-
n个+1和n个-1构成的2n项序列,其部分和总满足:
a 1 + a 2 + . . . + a n >= 0 “>a1+a2+...+an>=0a1+a2+…+an>=0的序列的个数。
卡特兰数表达式(1.2)式就是以该问题模型为基础推导出来的
卡特兰数又称卡塔兰数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−1)h(k−1)种,而之后比k大的值入栈,且都在k之前出栈,因此有 “>h(n−k)h(n−k)种方式,由于比k小和比k大的值入栈出栈情况是相互独立的,此处可用乘法原则, “>h(n−k)∗h(k−1)h(n−k)∗h(k−1)种,求和便是Catalan递归式。
Catalan Number表达式证明
第n个卡特兰数h(n)表达式如下
“>h(n)=Cn2nn+1=Cn2n−Cn−12n(1.2)(1.2)h(n)=C2nnn+1=C2nn−C2nn−1
具体证明过程如下
为了便于编程实现,需要进一步推导h(n)与h(n-1)之间的关系
已知 “>h(n)h(n),易知
“>h(n−1)=Cn−12n−2nh(n−1)=C2n−2n−1n
推导 < span class="math inline"> “>h(n)h(n)的 “>Cn2nC2nn和 “>h(n−1)< /span>h(n−1)的 “>Cn−12n−2C2n−2n−1之间的关系,由 “>kCkn=nCk−1n−1kCnk=nCn−1k−1知
“>n∗Cn2nCn2nCn2nCn2nCn2n
“> “> “> “> “> “>h(n)h(n)和 “>h(n−1)h(n−1)之间的递归式 “>h(n)=2(
最终得到
Catalan Number应用实例
括号匹配问题
问题描述: 矩阵连乘 “>P=A1A2.< span id="MathJax-Span-513" class="mo">..An
问题转换一下就是n对括号的正确匹配方案,可以做一下LeetCode-22
出栈次序问题
问题描述: 一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?
出栈问题问题正是卡特兰数递归式 “>h(n)=h(0)h(n−1)+h(1)h(n−2)+...+h(n−1)h(0)h(n)=h(0)h(n−1)+h(1)h(n−2)+…+h(n−1)h(0)的由来
相关应用问题
-
有2n个人排成一行进入剧场,入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零? (将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)
-
n个1和n个0组成一个2n位的二进制数,要求从左到右扫描,0的累计数不小于1的累计数,求满足条件的的数。
-
12个人排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排。对问题进行转化:用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有6个0,6个1的序列,并且任意前缀中0的个数大于等于1的个数就对应一种方案,转化后的问题就是问题2了。
-
给定节点组成二叉树的问题:给定n个节点,能构成多少种形状不同的二叉树?
先取一个点作为顶点,然后左边依次可以取0至n-1个相对应的,右边是n-1到0个,两两配对相乘,就是
h ( 0 ) ∗ h ( n − 1 ) + h ( 2 ) ∗ h ( n − 2 ) + . . . + h ( n − 1 ) h ( 0 ) = h ( n ) “>h(0)∗h(n−1)+h(2)∗h(n−2)+...+h(n−1)h(0)=h(n) h(0)∗h(n−1)+h(2)∗h(n−2)+…+h(n−1)h(0)=h(n)能构成
h ( n ) “>h(n)h(n)个,因此二叉树问题也可以解释卡特兰数递归式(1.1)式的由来
-
n*n棋盘从左下角走到右上角而不穿过主对角线的走法?
要从左下角走到右上角则必须向上走n步,向右n步,同时为了不跨过主对角线,则走过的步数中向上走的步数必须大于等于向右走的步数,剖析之后发现这个问题与问题3是等价问题,走法有卡特兰数
h ( n ) “>h(n)h(n)种。
可以做一下下面两题练练手:
hdoj2067-小兔的棋盘
LeetCode62-Unique Paths
-
n个+1和n个-1构成的2n项序列,其部分和总满足:
a 1 + a 2 + . . . + a n >= 0 “>a1+a2+. ..+an>=0a1+a2+…+an>=0的序列的个数。
卡特兰数表达式(1.2)式就是以该问题模型为基础推导出来的
卡特兰数又称卡塔兰数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−1)h(k−1)种,而之后比k大的值入栈,且都在k之前出栈,因此有 “>h(n−k)h(n−k)种方式,由于比k小和比k大的值入栈出栈情况是相互独立的,此处可用乘法原则, “>h(n−k)∗h(k−1)h(n−k)∗h(k−1)种,求和便是Catalan递归式。
Catalan Number表达式证明
第n个卡特兰数h(n)表达式如下
“>h(n)=Cn2n n+1=Cn2n−Cn−12n(1.2)(1.2)h(n)=C2nnn+1=C2nn−C2nn−1
具体证明过程如下
为了便于编程实现,需要进一步推导h(n)与h(n-1)之间的关系
已知 “>h (n)h(n),易知
“>h(n−1)=Cn−12n−2nh(n−1)=C2n−2n−1n
推导 “>h(n)h(n)的 “>Cn2nC2nn和 “>h(n−1) h(n−1)的 “>Cn−12n− “>kC kn=nCk−1n−1kCnk=nCn−1k−1知
“>n∗Cn< span id="MathJax-Span-262" class="mrow">2nCn2nCn2nCn2nCn2nn+1h(n)=2nCn−12n−1=2Cn−12n−1=2(2n−1)Cn−12n−2n=2(2n−1)h(n−1)=2(2n−1)n+1h(n−1)=2(2n
“> “> “> “> “> “>h(n)h(n)和 “>h(n−1)h(n−1)之间的递归式 “>h(n)=2(2n−1)n+1h(n−1)h(n)=2(2n−1)n+1h(n−1)
最终得到
Catalan Number应用实例
括号匹配问题
问题描述: 矩阵连乘 “>P=A1A2...AnP=A1A2…An,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,问有几种括号化的方案?
问题转换一下就是n对括号的正确匹配方案,可以做一下LeetCode-22
出栈次序问题
问题描述: 一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?
出栈问题问题正是卡特兰数递归式 “>h(n)=h(0)h(n−1)+h(1)h(n−2)+...+h(n−1)h(0) h(n)=h(0)h(n−1)+h(1)h(n−2)+…+h(n−1)h(0)的由来
相关应用问题
-
有2n个人排成一行进入剧场,入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零? (将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)
-
n个1和n个0组成一个2n位的二进制数,要求从左到右扫描,0的累计数不小于1的累计数,求满足条件的的数。
-
12个人排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排。对问题进行转化:用0表示对应的人在第一排,用1表示对应的人在第二排,那么含有6个0,6个1的序列,并且任意前缀中0的个数大于等于1的个数就对应一种方案,转化后的问题就是问题2了。
-
给定节点组成二叉树的问题:给定n个节点,能构成多少种形状不同的二叉树?
先取一个点作为顶点,然后左边依次可以取0至n-1个相对应的,右边是n-1到0个,两两配对相乘,就是
h ( 0 ) ∗ h ( n − 1 ) + h ( 2 ) ∗ h ( n − 2 ) + . . . + h ( n − 1 ) h ( 0 ) = h ( n ) “>h(0)∗h(n−1)+h(2)∗h(n−2)+...+h(n−1)h(0)=h(n) h(0)∗h(n−1)+h(2)∗h(n−2)+…+h(n−1)h(0)=h(n)能构成
h ( n ) “>h(n)h(n)个,因此二叉树问题也可以解释卡特兰数递归式(1.1)式的由来
-
n*n棋盘从左下角走到右上角而不穿过主对角线的走法?
要从左下角走到右上角则必须向上走n步,向右n步,同时为了不跨过主对角线,则走过的步数中向上走的步数必须大于等于向右走的步数,剖析之后发现这个问题与问题3是等价问题,走法有卡特兰数
h ( n ) “>h(n)h(n)种。
可以做一下下面两题练练手:
hdoj2067-小兔的棋盘
LeetCode62-Unique Paths
-
n个+1和n个-1构成的2n项序列,其部分和总满足:
a 1 + a 2 + . . . + a n >= 0 “>a1+a2+.. .+an>=0a1+a2+…+an>=0的序列的个数。
卡特兰数表达式(1.2)式就是以该问题模型为基础推导出来的
“>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) “>h(n)=Cn2nn+1=Cn2n−Cn−12n(1.2)(1.2)h(n)=C2nnn+1=C2nn−C2nn−1 “>h(n−1)=Cn−12n −2nh(n−1)=C2n−2n−1n “>n∗Cn2nCn2nCn2nCn2nCn2nn+1h(n)=2nCn−12n−1=2Cn−12n−1=2(2n−1)Cn−12n−2n=2(2n−1)h(n−1)=2(2n−1)n+1h(n−1)=2(2n−1)n+1h(n−1)(1)(2)