卡特兰数

之前看算法导论时,讲了给定几个数字,能构造出几种二叉树,当时只想到排列组合的解决方法,极其复杂又不好记,过段时间还忘了。。。。今天看大牛的文章,评论有人提及卡特兰数,了解后才知道这么优雅的解决思路。。

卡特兰数前几项

卡特兰数前几项为 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

如果在解题时推出了前几个数字符合这种规律的话,就可以考虑是否用卡特兰数求解了。

卡特兰数的递推公式

令 f(0) = 1 递推式为 f(n) = f(0) * f(n-1) + f(1) * f(n-2) + ... + f(n-2) * f(1) + f(n-1) * f(0)。
这个式子是我们将问题与卡特兰数联系起来的思路。而求解就不要用这个式子了,数学家们想出了通用计算公式 f(n) = c[2n,n] - c[2n, n+1] = c[2n,n]/(n+1)。计算结果时,还是用这个式子计算吧。

卡特兰数的应用

  1. 出栈问题

  2. 二叉树构成问题

  3. 凸多边形的三角形划分

  4. 括号匹配, 01 序列 等

你可能感兴趣的:(卡特兰数)