卡特兰数

来源:互联网 发布:au3.0录音软件 编辑:程序博客网 时间:2024/04/29 04:24
给定1,2,3,4,5五个数和一个栈,问一共有多少种出栈序列。。。
举例:两个数的话有:
a、1进栈,2进栈,2出栈,1出栈,序列为21
b、1进栈,1出栈,2进栈,2出栈,序列为12

所以两个数的话是2种

举例2

12个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?

其实这就是卡特兰数卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名,其前几项为 : 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, ...

其实这两题,第一题,很明显入栈出栈,就是卡特兰数,但是第二个例子就不那么明显了。

分成2排,那么就是说前面6个,后面6个。由于每一排也是从大到小排列的,那么我们就不用考虑,每一排的情况,因为你给定6个人,那么它肯定是那样排的,关键是给怎么样的6个人。

我们可以这样设想,12个人,将第一排的6个人,看成是入栈,第二排的人是出栈。而这些数字都是从1~12排列的(入和出分别当做一个数)

0246810

1357911

这样我们就可以看出来这就是卡特兰数

递推公式是:h(n) = h(0)*h(n-1)+h(1)*h(n-1)+……+h(n-1)*h(0)

h(n) = c(2n, n)/(n+1) = c(2n, n) - c(2n, n-1)

其他的例子

论坛的讨论

0 0