Catalan数(卡特兰数)
【推荐阅读】微服务还能火多久?>>> 由于Catalan数经常会在算法题或面试题中出现,在这里做一下小小的总结。 介绍 Catalan数是组合数学中一个常在各种计数问题中出现的数列。一般项公式为 Cn的另一个表达形式为 一般来讲,我们编程时用递推关系会更方便计算: 或 即:C(n) = C(1)*C(n-1) + C(2)*C(n-2) + … + C(n-1)C(1). 它的前几项为: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796。可以先通过前几项判断问题是否属于卡特兰数。 典型应用 这里有一本书介绍了66个相异的可由卡塔兰数表达的组合结构。 http://www-math.mit.edu/~rstan/ec/catadd.pdf (英文PDF) 1 括号化问题。矩阵链乘: P=A1×A2×A3×……×An,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案? 2 一个有n个X和n个Y组成的字串,且所有的部分字串皆满足X的个数大于等于Y的个数。以下为长度为6的dyck words: XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY 3 将上例的X换成左括号,Y换成右括号,Cn表示所有包含n组括号的合法运算式的个数( 面试题参看算法篇第7题 ): ((())) ()(()) ()()()