卡特兰数

整理自百度百科。

1.卡特兰数是一种数列,以比利时的数学家欧仁·查理·卡塔兰命名。

2.卡特兰数列:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012……

令第n项为h(n),则:

        h(0) = 1;

        h(1) = 1;

        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>=1

3.卡特兰数的应用

(1)排队

2n个人排队去买电影票,电影票50元一张,2n个人中n个手中拿着50元,n个手中拿着100元,售票员手中无零钱,请问有多少种排队方法使每个人都可以直接买到票而不用等待(例如队头的人拿着100元,则他需要等待直到有人拿50元才可以找零钱给他)。

另一个例子是:n个数入栈,问有多少种不同的出栈方式。

上述两个例子的答案都是h(n)。第一个例子我们不妨令拿50元的为1,拿100元的为0,第二个例子实际上是n个数入栈、出栈,共有n次入栈,n次出栈,不妨令入栈为1,出栈为0,则这两个问题可以抽象为同一个问题:n个1和n个0排列,问有多少种方式可以使从左向右数1的累加个数始终大于等于0的累加个数(例如1100满足,而1001不满足,因为数到第三个数时1的个数为1个而0的个数为2个)。

在2n个数中填入n个1,公有C(2n,n)种,这其中有一部分是不合要求的。可以证明不合要求的情况数和n+1和0、n-1个1组成的排列数一一对应,因此不符合的个数为C(2n,n+1),因此符合要求的个数为C(2n,n) - C(2n,n+1) = C(2n,n)/(n + 1) = h(n)。

(2)二叉树的个数

给定n个节点,问可以构成多少种不同形状的二叉树。

答案是h(n)种。

我们选定一个节点作为根节点,还剩下n-1个节点,如果根节点的左子树没有节点,则右子树有n-1个节点,如果左子树有1个节点,则右子树有n-2个节点……,则所有的情况个数即为h(0)*h(n-1) + h(1)*h(n-2) + …… + h(n-1)*h(0) = h(n)

 

你可能感兴趣的:(卡特兰数)