卡特兰数
2018-11-15 本文已影响4人
wean_a23e
之前看算法导论时,讲了给定几个数字,能构造出几种二叉树,当时只想到排列组合的解决方法,极其复杂又不好记,过段时间还忘了。。。。今天看大牛的文章,评论有人提及卡特兰数,了解后才知道这么优雅的解决思路。。
卡特兰数前几项
卡特兰数前几项为 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)。计算结果时,还是用这个式子计算吧。
卡特兰数的应用
-
出栈问题
-
二叉树构成问题
-
凸多边形的三角形划分
-
括号匹配, 01 序列 等