zoukankan      html  css  js  c++  java
  • 卡特兰数

    转载自http://blog.csdn.net/jtlyuan/article/details/7440591

    卡特兰数:规定C01,而C11C22C35C414C542C6132C7429C81430C94862C1016796

    C1158786C12208012C13742900C142674440C159694845·········································

    卡塔兰数的一般项公式为:

               C_n = \frac{1}{n+1}{2n \choose n} = \frac{(2n)!}{(n+1)!n!}                     

    另类递归式: 

              h(n)=((4*n-2)/(n+1))*h(n-1);

    Cn的另一个表达形式为

            C_n = {2n\choose n} - {2n\choose n-1} \quad\mbox{ for }n\ge 1

    h(n)= h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2)

     

    hai可以这样推导出来:

    n

    推到过程

    Cn

    1

    1       

    1

    2

    1  1

    2

    3

    1  2  2

    5

    4

    1  3  5  5

    14

    5

    1  4  9  14  14

    42

    6

    1  5  14  28  42  42

    132

    7

    1  6  20  48  90  132  132                 

    429

    ···

    ··· ···

    ···

     

    所以,在做题的时候,我们应该用上面的公式Cn=Ck*Cn-k (k=1,2``n)来判断是否使用于katalan数来解决问题,合适就列出前几项来判断推到出答案

     

    总结了一下,最典型的四类应用:(实质上却都一样,无非是递归等式的应用,就看你能不能分解问题写出递归式了)

    1.括号化问题。

    矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)

    2.出栈次序问题。

    一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?

    类似:有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)

    3.将多边行划分为三角形问题。

    将一个凸N+2多边形区域分成三角形区域的方法数?

    类似:一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她

    从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?

    类似:在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?

    4.给顶节点组成二叉树的问题。

    给定N个节点,能构成多少种不同的二叉树?

    (能构成h(N)个)

    Catalan数的解法

    Catalan数的组合公式为 Cn=C(2n,n) / (n+1);

    此数的递归公式为 h(n ) = h(n-1)*(4*n-2) / (n+1)

    卡特兰数真是一个神奇的数字,很多组合问题的数量都和它有关系,例如:

    Cn= n对括号正确匹配组成的字符串数,例如 3对括号能够组成:

    ((())) ()(()) ()()() (())() (()())

    Cn= n+1个数相乘,所有的括号方案数。例如, 4个数相乘的括号方案为:

    ((ab)c)d (a(bc))d (ab)(cd) a((bc)d) a(b(cd))

    Cn= 拥有 n+1 个叶子节点的二叉树的数量。例如 4个叶子节点的所有二叉树形态:

    卡特兰数 - lz_666888 - lz_666888的博客

    • Cn=n*n的方格地图中,从一个角到另外一个角,不跨越对角线的路径数,例如, 4×4方格地图中的路径有:

    卡特兰数 - lz_666888 - lz_666888的博客

    • Cn= n+2条边的多边形,能被分割成三角形的方案数,例如 6边型的分割方案有:

    卡特兰数 - lz_666888 - lz_666888的博客

    • Cn= 圆桌周围有 2n个人,他们两两握手,但没有交叉的方案数。

     

    下面是一些大公司的笔试题

    先来一道阿里巴巴的笔试题目:说16个人按顺序去买烧饼,其中8个人每人身上只有一张5块钱,另外8个人每人身上只有一张10块钱。烧饼5块一个,开始时烧饼店老板身上没有钱。16个顾客互相不通气,每人只买一个。问这16个人共有多少种排列方法能避免找不开钱的情况出现。

    C8=1430,所以总数=1430*8!*8!

    2012腾讯实习招聘笔试题

    在图书馆一共6个人在排队,3个还《面试宝典》一书,3个在借《面试宝典》一书,图书馆此时没有了面试宝典了,求他们排队的总数?

    C3=5;所以总数为5*3!*3!=180.

  • 相关阅读:
    五险一金的详细解释
    Android源码下载和编译Tips
    C++ STL遍历map的时候如何删除其中的element
    Android 2.3.4 RTSP的实现不在StageFright中,在opencore中
    找不到显示桌面的快捷方式怎么办|显示桌面的快捷方式找不到解决方法|显示桌面代码|
    选择适合过一辈子的人
    .net兼职人员| .net兼职系统开发人员| .net兼职开发人员
    skype帐号|超值skype帐号|14分钟skype账号|1元40个|5毛20个|15天有效期
    黄金市场的时间段分析
    解决导航问题winform的左侧树控件右侧panel加载用户控件
  • 原文地址:https://www.cnblogs.com/ldjhust/p/2988762.html
Copyright © 2011-2022 走看看