目的
用于解决一些有(qi)趣(guai)的问题,如:括号匹配问题,凸多边形划分问题,二叉树种类问题等。递推方程为hn=∑ni=1hi−1×hn−i。
为什么凸多边形划分的方案数是Catalan数?
设有一个凸x边形,选择一条边,作一个以这条边为一边的三角形,那么这样就将原
为什么括号匹配的方案数是Catalan数?
括号匹配问题:给你n个左括号,
由于最后一个位置一定是一个右括号,那么可以将这个括号与之前的某一个左括号对应起来,因此一个合法的序列A一定可以表示成一个序列
为什么一个节点数固定的二叉搜索树的种类是Catalan数?
印点一个节点为根,那么他的左右儿子也一定是一棵合法的二叉搜索树,因此递推方程也是开头给出的那个。
说到这里,Catalan数递推的时间复杂度仍然是O(n2)的,那么有没有通项公式呢?
其实是有的,hi=Cn2n−Cn−12n−1=Cn2nn+1,C是组合数。
证明?
以括号匹配问题为例,假设有一个二进制序列,一共
显然,这个二进制序列一共有Cn2n种排列方式,减去不合法序列的方案数就是卡特兰数的通项公式了。
假设有一个不合法序列,那么必定有一项2m+1,其中前2m项有m个
很显然,这个公式也可以变成hn=Cn2nn+1,那么这个通项公式即可得到证明。
算法模板——Catalan数
最新推荐文章于 2023-12-02 14:07:49 发布