美文网首页算法+结构
Catalan number卡塔兰数的应用

Catalan number卡塔兰数的应用

作者: PaulLuv | 来源:发表于2018-05-12 17:43 被阅读212次

    卡塔兰数非常经典,很多现实问题都是卡塔兰数问题。在编程领域也很常见。如下的面试题:

    2012腾讯实习招聘笔试题
    在图书馆一共6个人在排队,3个还《面试宝典》一书,3个在借《面试宝典》一书,图书馆此时没有了面试宝典了,确保三个人都能借到书,求他们排队的总数?

    解题思路:
    3个还书的人,可以有3!种顺序.
    3个借书的人同样有3!= 6种顺序.
    图书馆没有书,那必须保证还书的数量不少于借书的数量,这样的排序组合数。
    我们将还书的人以0标记,借书的人以1标记,那么这样的组合有:
    000111 001011 001101 010011 010101,

    所以最终的答案就是 5 * 3!*3!= 180;

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

    由上面的一题我们知道,答案是 n * 8!*8!,
    其中这个n如何求解呢?可以抽象为
    8个0 8个1的从左到右数,确保当前数的前面,出行的0的次数不少于1的次数的组合数。

    卡塔兰数:可以这样来理解其定义:n个0与n个1随机组合排列,从左到右数第K个数时,确保K前面0的个数不少于1的个数,这样的组合数就是卡塔兰数。

    卡塔兰数的一般公式项

    卡塔兰数的实例应用案例:

    1. 括号化问题。一个合法的表达式由()包围,()可以嵌套和连接,如(())()也是合法 表达式;现在有 6 对(),它们可以组成的合法表达式的个数为

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

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

    4. 将多边行划分为三角形问题。将一个凸N+2多边形区域分成三角形区域的方法数?类似:一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?类似:在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?

    5. 给顶节点组成二叉树的问题。给定N个节点,能构成多少种不同的二叉树,(能构成Cn个)Catalan数的解法Catalan数的组合公式为 Cn=C(2n,n) / (n+1);
      例如 4个叶子节点的所有二叉树形态:


      4个叶子节点的所有二叉树形态的排列
    6. Cn=n*n的方格地图中,从一个角到另外一个角,不跨越对角线的路径数,例如, 4×4方格地图中的路径有:


      4×4方格地图中的路径

    Wiki链接参考

    相关文章

      网友评论

        本文标题:Catalan number卡塔兰数的应用

        本文链接:https://www.haomeiwen.com/subject/cohhdftx.html