定位修改器没有用:卡特蓝数列是怎样的???

来源:百度文库 编辑:高考问答 时间:2024/04/29 07:19:43

五、Catalan数
欧拉多边形分割问题:
设有一个正凸n边形,可以用n-3条不相交的对角线将n边形分成n-2个互相没有重叠的三角形, 例如n=5,共有下图所示5种方法。

对任意给定的一个N边形,任意选定一条边,则该边必是某一组成分割的三角形的一边,它的两个端点也是该三角形的两个端点,另一个端点可以来自于另外N-2个顶点,这个三角形将N边形分成二个多边形,下图是对一个六边形选定底边时的分割情况情况。
根据加法原理和乘法原理有:Hn=Hn-1+H3Hn-2+···+Hn-2H3+Hn-1 (1)
另外任取一条对角线Pij,将N边形一分为二,二部分分别为多边形,它们的边数之和为n+2,从一个顶点出发的n-3条对角线形成的n边形分割数为:H3Hn-1+H4Hn-2+…+Hn-2H4+Hn-1H3,从n个顶点出发的所有对角线形成的n边形分割数为n(H3Hn-1+H4Hn-2+…+Hn-2H4+Hn-1H3),由于一条对角线有两个端点,所以在上面的统计中,每条对角线出现了两遍,从所有的对角线出发形成的n边形分割数为:n(H3Hn-1+H4Hn-2+…+Hn-2H4+Hn-1H3)/2,任何一个分割是由n-3条对角线组成的,每个分割在上式中被重复统计了n-3遍,所以(n-3)Hn=n(H3Hn-1+H4Hn-2+…+Hn-2H4+Hn-1H3)/2, (2)
将(1)式写成n+1的情况有:Hn+1=Hn+H3Hn-1+···+Hn-1H3+Hn=(2+2(n-3)/n)Hn=((4n-6)/n)Hn
数学上将下列数列称为Catalan数,C0=1,C1=1,Cn=C0Cn-1+C1Cn-2+…Cn-2C1+Cn-1C0,下表给出了前16个Catalan数。
Catalan数字
01
11
22
35
414
542
6132
7429
81430
94862
1016796
1158786
12208012
13742900
142674440
159694845
显然,n边形的分割总数Hn=Cn-2。(只要设H2=1即可)
[例7-7] 设有一个凸n边形,可以用n-3条不相交的对角线将n边形分成n-2个互相没有重叠的三角形, 例如n=5,共有下图所示5种方法。

程序要求:当给出凸n边形的边数n(n<=1000),求出共有多少种不同的分法。
[算法设计] 本题实际上是要求某个Catalan数,由于n较大,因此要用高精度运算。在选用计算公式时,可选用递推公式。
[程序清单]
program ex7_7(input,output);
const maxn=1000;
type arraytype=array[0..maxn] of longint;
var i,j,n:longint;
h:arraytype;
procedure mul(var h:arraytype;k:longint);
var i:longint;
begin
for i:=0 to maxn do h[i]:=h[i]*k;
for i:=0 to maxn-1 do
begin
h[i+1]:=h[i+1]+h[i] div 10;
h[i]:=h[i] mod 10
end
end;
procedure devide(var h:arraytype;k:longint);
var d,i,r:longint;
begin
r:=0;
for i:=maxn downto 0 do
begin
d:=10*r+h[i];
h[i]:=d div k;
r:=d mod k
end
end;
begin {Main program}
write(''Input n:'');
readln(n);
for i:=1 to maxn do h[i]:=0;
h[0]:=1;
for i:=3 to n-1 do
begin
mul(h,4*i-6);
devide(h,i)
end;
i:=maxn;
while (i>0) and (h[i]=0) do i:=i-1;
for j:=i downto 0 do write(h[j]);
writeln
end.

Catalan numbers:
B(n+1)=B(0)B(n)+B(1)B(n-1)+B(2)B(n-2)+...+B(n)B(0)

Bn=C(2n,n)/(n+1)

Catalan numbers:
B(n+1)=B(0)B(n)+B(1)B(n-1)+B(2)B(n-2)+...+B(n)B(0)

Bn=C(2n,n)/(n+1)
do you know