一、定义式
二、通项公式
三、递推式
四、证明
(1)由定义式推导通项公式
此时我们引出一个模型:括号序列
有左括号和右括号各n个,请问有多少个合法序列?
(例如:n等于3时,所有合法序列为()()()、()(())、(())()、(()()) 和 ((())))
这道题有两种求解方法。
法1:设f(n)代表左括号与右括号各n个时,合法序列的种类数。
现在可以开始讨论啦!以与第一个左括号所在的括号为界,剩余的(n-1)个括号要么分布于该括号里面,要么分布于该括号外面。例如:()()()中有0个在里面,2个在外面;(())()有1个在里面,1个在外面。
当有i个括号在里面,(n-1-i)个括号在外面时,共有f(i)*f(n-1-i)种情况。
且里面的括号数目可能为1,2,3······n,所以共有f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+······+f(n-1)*f(0)种。发现了吗?这就是卡特兰数!
法二:那我们再来考虑另一种思路。
假设给出左括号和右括号各n个,问你有多少个序列不管是否合法。很明显,这是一道排列组合问题,共 C(2n,n)种。好啦,那我们现在需要在这个基础上排除不合法的个数。
在考虑不合法序列数目之前,我们先要考虑另一个问题,什么情况下不合法?
遍历序列中的每一个符号,要保证当前序列中左括号数目大于等于右括号数目(不然就会出现存在右括号十分“多余”)
我们不妨把左括号和右括号的形式抽象为数组形式,左括号为-1,右括号为1(例如:()(())——>(1,-1,1,1,-1,-1)。)合法序列的条件此时转化为:遍历每一个元素,保证当前序列和不能小于0。
((1,-1,1,1,-1,-1)—>sum=1,sum=0,sum=1,sum=2,sum=1,sum=0—>合法)
反之,不合法序列的条件:至少存在一个元素,使当前全部元素和小于0。
我们来一个神奇的转化规则:当出现第一个元素使当前全部元素和小于0时(明显,此时和为-1),我们把当前全部元素取反(1变-1,-1变1)—>集合变为(n+1)个1和(n-1)个-1
例如:(1,-1,-1,1,-1,1)—>遍历到第三个元素时,当前全部元素和为-1—>(-1,1,1,1,-1,1)
这个规则会将每一种“非法情况”一一对应到包含(n+1)个1和(n-1)个-1的集合。由此可得,不合法的情况数是C(2n,n+1)
合法情况=总情况-不合法情况=C(2n,n)-C(2n,n+1)=
最后的最后,结合法一与法二的结果,f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+······+f(n-1)*f(0)=,通项公式得证。
递推式只需要将上述通项公式代入A[n]/A[n-1]即可得出,在此不多加赘述。