码迷,mamicode.com
首页 > 其他好文 > 详细

Catalan 数

时间:2019-11-01 20:34:51      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:前缀和   class   strong   匹配   证明   lan   inline   前缀   str   

\(Catalan\) 数列

? 给定\(n\)\(0\)\(n\)\(1\),它们按照某种顺序排成长度为\(2n\)的序列,满足任意前缀中\(0\)的个数都不少于\(1\)的个数的序列的数量即为\(Catalan\)数列。

证明:

? 令\(n\)\(0\)\(n\)\(0\)随意排成一个长度为\(2n\)的序列\(s\),若\(s\)不满足任意前缀和中\(0\)的个数不少于\(1\)的个数,则存在一个最小的位置\(2p+1\),使得\(s\)[\(1,2p+1\)]中有\(p\)\(0\)\(p+1\)\(1\)。而把\(s\)[\(2p+2\),\(2n\) ]中的数都取反,包含\(n-p-1\)\(0\)\(n-p\)\(1\)。于是,我们得到了\(n-1\)\(0\)\(n+1\)\(1\)排成的序列。

? 同理,令\(n-1\)\(0\)\(n+1\)\(1\)随意排成一个长度为\(2n\)的序列\(B\)。也必定存在一个最小的位置\(2p+1\),使得\(s[1,2p+1]\)中有\(p\)\(0\)\(p+1\)\(1\),把后面的序列取反,就得到了\(n\)\(0\)\(n\)\(1\)组成的存在一个前缀\(0\)\(1\)多的序列。

? 所以,以下两种序列的数量其实是一样的:

  1. \(n\)\(0\),\(n\)\(1\)组成的存在一个前缀\(0\)\(1\)多的序列。
  2. \(n-1\)个0,\(n+1\)\(1\)组成的序列。

所以,用所有情况减去不合法的情况就得到了卡特兰数。

推论

? 以下问题都与\(Catalan\)数有关

1. 括号匹配的合法括号序列数量

2.  合法出栈序列数量
3.  $n$ 个节点构成的不同二叉树的数量
4.  平面直角坐标系中,每一步只能向上或向右走,从$(0,0)$到$(n,n)$并且除了两个端点外不接触直线$y=x$的路线数量为$2Cat_{n-1}$。

Catalan 数

标签:前缀和   class   strong   匹配   证明   lan   inline   前缀   str   

原文地址:https://www.cnblogs.com/doublety/p/11778734.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!