算法习题之卡特兰数

卡特兰数

卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。其前几项为:
1, 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, …

k(0) = 1, k(1) = 1时,如果接下来的项满足:
k(n) = k(0) * k(n - 1) + k(1) * k(n - 2) + … + k(n - 2) * k(1) + k(n - 1) * k(0)
或者
k(n) = c(2n, n) - c(2n, n-1)
或者
k(n) = c(2n, n) / (n + 1)
就说这个表达式,满足卡特兰数,常用的是范式1和2,3几乎不会使用到

习题1 假设给你N个0,和N个1,你必须用全部数字拼序列 返回有多少个序列满足:任何前缀串,1的数量都不少于0的数量

习题2 有N个二叉树节点,每个节点彼此之间无任何差别 返回由N个二叉树节点,组成的不同结构数量是多少?

卡特兰数的算法原型在做题时怎么发现?

1)如果像题目一一样,这个太明显了,你一定能发现
2)看看题目是不是类题目二问题,比如:
人员站队问题
出栈入栈问题

猜你喜欢

转载自blog.csdn.net/sam475259540/article/details/131489655