卡特兰数与出栈顺序数
¶背景
卡特兰数是组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡特兰(1814–1894)命名。历史上,清朝数学家明安图(1692年-1763年)在其《割圜密率捷法》中最先发明这种计数方式,远远早于卡特兰。有中国学者建议将此数命名为“明安图数”
或“明安图-卡特兰数”。-- by Wikipedia
其一般公式为:
¶问题
n个不同元素依次入栈,问有多少种合法的出栈顺序?
¶思路
有A、B两个元素,入栈顺序AB,则出栈情况有两种:
- 入A, 出A, 入B, 出B.
- 入A, 入B, 出B, 出A.
现在假设f(n)为 " n 个不同元素依次入栈, 出栈顺序的种类数". 显然f(1)=1,f(2)=2.
现在按照第一个入栈元素,在出栈序列中的位置进行分类讨论, 假设入栈序列ABCD:
- A第一个出栈时,A先进,然后马上出栈.这种情况下,共有“BCD出栈顺序的种类数”种方案.也就是f(n-1)种.
- A第二个出栈时,A先进,B再进,之后B需要马上出来(这样才能确保A排第二),此时共有f(n-2)种方案.
- A第三个出栈时,A先进,之后只要确保排在A后面两个的元素比A先出即可.此时共有f(2)*f(n-3)种方案.f(2)是指“BC入栈出栈顺序的种类数”,f(n-3)是指”D入栈出栈的种类数”.
- A第四个出栈时,A先进,只需确保排在A后面的三个元素比A先出即可,即f(n-1)种.
此时可得:
上式中,f(0)=1.
这个实际上就是卡特兰数的递推式:
其通项公式即:
也可以表示为:
所以元素A、B、C、D依次进栈,其所有可能的出栈序列,应该有14种情况
A第一个出栈:ABCD;ACBD;ACDB;ABDC;ADCB;
A第二个出栈:BACD;BADC;
A第三个出栈:CBAD;BCAD;
A第四个出栈:BCDA;CBDA;CDBA;BDCA;DCBA.
¶参考
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Chen0495的空间站!
评论