首页 > 代码库 > 【数论】卡特兰数

【数论】卡特兰数

Catanlan Number

    卡特兰数,又称卡塔兰数(Catanlan Number),是一个非常多见、高深的数列。它能解决我们数论题目中一些计数问题。前几项为:1,2,5,14,42,132,429,1430,4862,16796,58786……

    

    那么如何求Catanlan Number的第N项呢?

    1、技术分享

    2、技术分享

    3、技术分享

    4、技术分享

    5、技术分享

 

着重需要介绍一下的是卡特兰数的功能

 

    例一:二叉树的计数

    n个非叶节点的满二叉树的形态数(对称后得到的二叉树除非自己本身对称,否则算是不同),这里取Wikipedia上的一张图片说明问题:

技术分享

 

    问题分析:设该二叉树的左子树有i个节点,则右子树可想而知有n-i-1个节点。

                  我们可以使用f(n)来表示n个节点二叉树不同的形态数。

                  那么总和的答案就是我们的式3了。

 

    例二:AB排列问题

    有n个A和n个B排成一排,要求从序列的第一个开始无论到任何位置,B的个数不能超过A的个数。

    问题分析:可以尝试用↗来表示A,用↘来表示B,那么我们可以画一个图标,最终是一个等腰直角三角形,你会惊讶地发现画完以后任何时候A都≥B。

 

    例三:乘法加括号

    一个序列A1*A2*A3*……*An,可以加括号改变该序列的运算顺序,问:有多少种不同的运算顺序?

    问题分析:n=1时,A0*A1,f(1)=1

                  n=2时,A0*A1*A2,A0*(A1*A2),f(2)=2

                                       ……

                  以此类推,会发现答案是卡特兰数列的第N项。

 

                 我们也可以像二叉树计数问题那样得到f(0)*f(n-1)+f(1)*f(n-2)+……+f(n-1)*f(0)

                 发现答案就是卡特兰数、

 

   例四:欧拉多边形分割问题

   我们可以用n-3条互不相交的对角线将n边形分成n-2个互相没有重叠的三角形,输出有多少种不同的分法。

   如N=6时,如下所示

技术分享

 

   Catalan Number是一门非常高深的理论,如果有兴趣可以继续去研究。

   [本文部分图片来自于:http://blog.csdn.net/duanruibupt/article/details/6869431]

  

 

【数论】卡特兰数