卡特兰数(Catalan)及其应用

卡特兰数是组合数学中的重要数列,常见于多种计数问题。本文介绍了卡特兰数的定义、递推公式及8种应用场景,如括号匹配、栈的出栈序列、二叉树构造等。通过递推关系和实例解析,展示了卡特兰数在解决实际问题中的应用价值。
摘要由CSDN通过智能技术生成

卡特兰数

卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列。

卡特兰数前几项为 : 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, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, 18367353072152, 69533550916004, 263747951750360, 1002242216651368, 3814986502092304, 14544636039226909, 55534064877048198, 212336130412243110, 812944042149730764, 3116285494907301262, 11959798385860453492, 45950804324621742364, ...

输入一个整数n,计算h(n)。

令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(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2
h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5
另类递推式:h(n)=h(n-1)*(4*n-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,...)

 

直接根据递归式,写出相应的算法:

//函数功能: 计算Catalan的第n项  
//函数参数: n为项数  
//返回值:   第n个Catalan数  
int Catalan(int n)  
{  
    if(n <= 1)  
        return 1;  
  
    int *h = new int [n+1]; //保存临时结果  
    h[0] = h[1] = 1;        //h(0)和h(1)  
    for(int i = 2; i <= n; i++)    //依次计算h(2),h(3)...h(n)  
    {  
        h[i] = 0;  
        for(int j = 0; j < i; j++) //根据递归式计算 h(i)= h(0)*h(i-1)+h(1)*h(i-2) + ... + h(i-1)h(0)  
            h[i] += (h[j] * h[i-1-j]);  
    }  
    int result = h[n]; //保存结果  
    delete [] h;       //注意释放空间  
    return result;  
}  

卡特兰数的应用

 

应用1:

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值