2.12。。。

题目较多,不一 一发代码,整合了相似的题然后总结一下就行。
一、卡特兰数
以栈那道题举例。

公式:
1、h(i) = c(2n, n) - c(2n, n - 1)
证明:我们来形象一点考虑这个序列的意义,我们把入栈看做I,出栈看做O,那么相当于我们现在有一个长度为2 * n的IO序列,并且对于这个序列的每一个前缀都应该满足I的个数大于O的个数,(入栈数大于等于出栈数),那么首先,我们先不考虑后一个前缀中的个数限制,那么总的I有n个,O有n个的情况一定是C(2n,n)个,然后考虑,非法的情况,首先我们还是保证这个非法的序列有n个I,n个O,那么显然的,因为它是非法的,那么一定存在某个位置x,满足x是一个奇数,并且是第一个满足序列1 ~ x中的O的个数比I的个数大1的位置,那么考虑这种情况意味着什么,如果,我们将1 ~ x中的I全部变成O,O全部变成I,那么原来的序列,会变成一个有着n +1个I,有n - 1个O的序列,并且显然,任意不同的非法序列,都一定能对应不同的有着n - 1个O,n + 1个I的序列,我们在来反向考虑,这样的序列是不是也一定能够对应一个非法序列,显然对于一个满足有n - 1个O,n + 1个I的序列,我们一定能找到一个位置x,满足x为奇数,并且,x是第一个满足1 ~ x中,I的数量比O的数量多1的(显然I的总数大于O的总数),那么我们将这一段中的I和O反转,就形成了一个有着n个O,n个I的非法序列,所以说最终的合法的序列种数为C(2n,n) - C(2n, n - 1)个,得证。
2、
证明:我们还是在定义的基础上来搞一搞,设我们最后出栈的数为k,那么k -1一定在k入栈之前就已经出栈,也就是说k入栈的时候,栈为空,那么1 ~ k- 1出栈序列有h(k- 1)中,同样的,因为,k为最后出栈的,所以在k入栈之后,k + 1 ~ n全部入栈并且出栈之后,k最后出栈,那么k +1 ~ n的出栈序列有h(n- k)种,那么我们枚举k就可以获得上面的表达式了。
3、h(n) = c(2n, n) / (n + 1)
证明:我们知道,c(2n,n) * n / (n + 1) = c(2n, n - 1),那么显然,从递推式一可以得到,h(n) = c(2n, n) - c(2n, n) * n / (n + 1) = c(2n, n) / (n + 1)
4、h(n) = h(n - 1) * (4 * n - 2) / (n + 1)
证明:比较形象的证明我是没有找到的,但是可以直接粗暴的从式子1恒等证明回来,所以姑且算作是纯数学推导吧,具体的只需要证明c(2n - 2, n - 1) * (4 * n - 2) = c(2n, n)就可以了。

这里是卡特兰数的概念知识。

卡特兰数又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,其前几项为 : 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, …
原理
令h(0)=1,h(1)=1,catalan数满足递推式[1] :
h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)*h(0) (n>=2)
例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2
h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5
另类递推式[2] :
h(n)=h(n-1)*(4*n-2)/(n+1);
递推关系的解为:
h(n)=C(2n,n)/(n+1) (n=0,1,2,…)
递推关系的另类解为:
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,…)

于是好多题都是这个思路。

二、找规律类型。
那种不好推状态转移的题就可以找规律。
典型的就是汉诺塔了,毕竟我也没太去想那个的原理,公式就是2的n次方-1。第二题也是这样,如果直接写出5,6个,不难看出是斐波那契数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值