catalan卡特兰数

catalan卡特兰数:卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数例。由比利时的数学家欧仁·查理·卡塔兰(1814-1894)命名。卡塔兰数的一般公式为 C(2n,n)/(n+1)。

一般计算式为(递归):h(n)=(4n-2)/(n+1)*h(n-1)
 (n>1),h(0)=1。

计算单个catalan的C++程序:

ll catalan(int n)
{
    if(n==0||n==1) return 1;
    ll sum=1;
    for(int i=2;i<=n;i++)
        sum=(4*i-2)*sum/(i+1);
    return sum;
}

计算多个catalan的打表C++程序:

ll ca[100];
void catalan(int n)
{
    ca[0]=ca[1]=1;
    for(int i=2;i<=n;i++)
        ca[i]=(4*i-2)*ca[i-1]/(i+1);
}

因为第三十项之后catalan数就超long long了,所以附上JAVA大数算的catalan数:

import java.io.*;
import java.math.*;
import java.util.*;
public class Main
{
	private static BigInteger four=BigInteger.valueOf(4);
	private static BigInteger two=BigInteger.valueOf(2);
	private static BigInteger []ca=new BigInteger[105];
	public static void catalan(int n)
	{
		ca[0]=ca[1]=BigInteger.ONE;
		for(int i=2;i<=n;i++)
		{
			BigInteger nn=BigInteger.valueOf(i);
			BigInteger mm=(four.multiply(nn)).subtract(two);
			BigInteger ii=nn.add(BigInteger.ONE);
			ca[i]=(mm.multiply(ca[i-1])).divide(ii);
		}
	}
    public static void main(String[] args)
    {
        Scanner cin=new Scanner (new BufferedInputStream(System.in));
        catalan(100);
        while(cin.hasNextInt())
        {
        	int n=cin.nextInt();
        	System.out.println(ca[n]);
        }

    }
}

卡特兰数的前几项: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, …

最常用catalan数的是出栈问题:一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?符合catalan数。

wikioi 1086,3112,3113,3134.

还有2014微软编程之美有道题就是catalan数。

catalan卡特兰数,布布扣,bubuko.com

时间: 2024-12-21 18:28:18

catalan卡特兰数的相关文章

卡特兰数(Catalan)

卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796. 通项:f(n) = f(0)*f(n-1) + f(1)*f(n-2) + .......+ f(n-2)*f(1) + f(n-1)*f(0) n>=2 f(n)=f(n-1)*(4n-2)/(n+1) 应用场景:

[LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析

本文原题: LeetCode. 给定 n, 求解独特二叉搜寻树 (binary search trees) 的个数. 什么是二叉搜寻树? 二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树. 举个栗子,给定 n = 3, 共有 5 个. 1 3 3 2 1 \ / / / \ 3 2 1 1

Catalan数——卡特兰数

一.Catalan数的定义 令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) 该递推关系的解为:h(n) = C(2n,n)/(n+1),n=0,1,2,3,... (其中C(2n,n)表示2n个物品中取n个的组合数) 二.问题描述 12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? 问题分析: 我们先把这12个

Catalan number (卡特兰数)

卡特兰数非常经典,很多现实的问题都是卡特兰数,如合法的入栈出栈序列有多少种就是卡特兰数,为什么呢?我们可以把0看成入栈操作,1看成出栈操作,即0的累计个数不小于1的排列有多少种.还有很多其他的问题都是卡特兰数,如二叉树的个数,有序树的个数,多边形分成三角形的个数等. 卡特兰数的通项是c(2n, n)/(n+1). 2017年百度之星资格赛的最后一题就是用(卡特兰数+分块打表)来解决的. http://bestcoder.hdu.edu.cn/contests/contest_showproble

(转载)Catalan数——卡特兰数

Catalan数--卡特兰数 今天阿里淘宝笔试中碰到两道组合数学题,感觉非常亲切,但是笔试中失踪推导不出来后来查了下,原来是Catalan数.悲剧啊,现在整理一下 一.Catalan数的定义令h(1)=1,Catalan数满足递归式:h(n) = h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1),n>=2该递推关系的解为:h(n) = C(2n-2,n-1)/n,n=1,2,3,...(其中C(2n-2,n-1)表示2n-2个中取n-1个的组合数) 问题描

卡特兰数(Catalan Number) 算法、数论 组合~

Catalan number,卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡特兰数的前几个数 前20项为(OEIS中的数列A000108):1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190

浅谈卡特兰数(Catalan number)的原理和应用

一.卡特兰数(Catalan number) 1.定义 组合数学中一个常出现在各种计数问题中出现的数列(用c表示).以比利时的数学家欧仁·查理·卡特兰的名字来命名: 2.计算公式 (1)递推公式 c[n]=Σc[k]*c[n-k-1],边界条件为c[0]=1; 其递推解为c[n]=C(2n,n)/(n+1),即卡特兰数的通项公式,其中C表示数的组合: (2)另类递推式 c[n]=c[n-1](4n-2)/(n+1),边界条件为c[0]=1; 其递推解为c[n]=C(2n,n)-C(2n,n-1)

卡特兰数(Catalan number)-力扣96

卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列.以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,其前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 244662

卡特兰数(Catalan)及其应用

卡特兰数 大佬博客https://blog.csdn.net/doc_sgl/article/details/8880468 卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列. 卡特兰数前几项为 : C0=1,C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,C7=429,C8=1430,C9=4862,C10=16796 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 26