Catalan数—卡特兰数
来源:互联网 发布:演唱会抢票攻略 知乎 编辑:程序博客网 时间:2024/05/21 23:33
卡特兰数又称卡塔兰数,英文名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, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...
卡特兰数Cn满足以下递推关系[1] :
令h(0)=1,h(1)=1,catalan数满足递推式[2] :
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
另类递推式[3] :
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,...)
求卡特兰数:
Java:
import java.math.BigInteger;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); BigInteger a[]=new BigInteger[105]; a[0]=BigInteger.ONE; a[1]=BigInteger.ONE; for(int i=2;i<=100;i++){ a[i]=a[i-1].multiply(BigInteger.valueOf(4*i-2)).divide(BigInteger.valueOf(i+1)); } int n; while(in.hasNext()){ n=in.nextInt(); if(n==-1)break; System.out.println(a[n]); } }}
C++:
#include<cstdio>#include<iostream>using namespace std;int num[105][105];int main(){ num[0][1]=1; num[1][1]=1; int k=1; for(int i=2;i<=100;i++){ int mul=4*i-2,j=1,x; while(j<=k){ int z=mul*num[i-1][j]; x=j; num[i][x]+=z%10; num[i][x+1]+=z/10; for(int x=j,y=1;y<=5;y++) if(num[i][x]>=10){ num[i][x+1]+=(num[i][x]/10); num[i][x]=num[i][x]%10; x++; } j++; } for(int p=100;p>=1;p--) if(num[i][p]!=0){ k=p; break; } j=k; while(j>=1){ num[i][j-1]+=(num[i][j]%(i+1)*10); num[i][j]/=(i+1); j--; } } int n; while((cin>>n)&&n!=-1){ for(int i=100;i>=1;i--){ if(num[n][i]!=0){ for(int j=i;j>=1;j--){ cout<<num[n][j]; } cout<<endl; break; } }}}
阅读全文
0 0
- 卡特兰数(Catalan)
- 卡特兰数(Catalan)
- 卡特兰数catalan
- catalan卡特兰数
- 卡特兰数(Catalan)
- Catalan(卡特兰)数
- Catalan 卡特兰数
- 卡特兰数Catalan
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- Catalan数——卡特兰数
- 卡特兰数——Catalan数
- Catalan数—卡特兰数
- Linux 小记
- 数据结构实验之排序六:希尔排序
- LA4329 Ping pong(树状数组)
- javaScript内置对象Date
- Android数据库高手秘籍(二)——创建表和LitePal的基本用法
- Catalan数—卡特兰数
- 小白初学 名称空间
- 银行排队问题之单窗口“夹塞”版(pta)
- 瑞芯微Parameter File Format解析
- hdu 1564 Play a game
- 简单防刷后台代码
- Manacher模版
- Filter的过滤顺序
- 火星数字