2012腾讯实习笔试中看到的Catalan数

卡特兰数:规定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方格地图中的路径有:

2012腾讯实习笔试中看到的Catalan数_第1张图片

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

2012腾讯实习笔试中看到的Catalan数_第2张图片

  • 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.

你可能感兴趣的:(数据结构与算法)