zoukankan      html  css  js  c++  java
  • 卡特兰数

    令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,...)

    作用:

    括号化:矩阵连乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?

    出栈次序:一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?

    凸多边形三角划分:在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。任务是键盘上输入凸多边形的边数n,求不同划分的方案数f(n)。比如当n=6时,f(6)=14。

     

    原始代码:

    __int64 catalan[40];  
    void catalans()
    {
        memset(catalan,0,sizeof(catalan));  
        catalan[0]= catalan[1]= 1;  
        for(int i=2; i<= 35; i++)  
        {  
            for(int j=0; j< i; j++)  
                catalan[i]+=catalan[j]*catalan[i-j-1];  
        }  
    }
        

    大数代码:

    void catalan() //求卡特兰数
    {
        int i, j, len, carry, temp;
        a[1][0] = b[1] = 1;
        len = 1;
        for(i = 2; i <= 100; i++)
        {
            for(j = 0; j < len; j++) //乘法
            a[i][j] = a[i-1][j]*(4*(i-1)+2);
            carry = 0;
            for(j = 0; j < len; j++) //处理相乘结果
            {
                temp = a[i][j] + carry;
                a[i][j] = temp % 10;
                carry = temp / 10;
            }
            while(carry) //进位处理
            {
                a[i][len++] = carry % 10;
                carry /= 10;
            }
            carry = 0;
            for(j = len-1; j >= 0; j--) //除法
            {
                temp = carry*10 + a[i][j];
                a[i][j] = temp/(i+1);
                carry = temp%(i+1);
            }
            while(!a[i][len-1]) //高位零处理
            len --;
            b[i] = len;
        }
    }
  • 相关阅读:
    [转] Optimizely:在线网站A/B测试平台
    批处理命令——choice
    批处理命令——%0
    批处理命令——call 和 start
    批处理命令——rem 和 pause
    批处理命令——goto 和 :
    PHPCMS V9 学习总结
    PHPCMS V9 环境搭建
    批处理命令——echo 和 @
    利用Qt Assistant 定制帮助文档
  • 原文地址:https://www.cnblogs.com/pshw/p/5325095.html
Copyright © 2011-2022 走看看