卡特兰数递推分析的重复问题

问题引入:

在学习卡特兰数的时候,两个经典的例子分别是括号匹配和栈混洗。它们都用到了一个相同的递推公式:

f(n) = ∑ f(k-1) * f(n-k) k = 1, 2, 3…, n

这个式子乍看很合理,但是仔细想来又觉得可能会有重复的情形。

本文将分析这个递推式的含义。

递推公式:

f(n) = ∑ f(k-1) * f(n-k) k = 1, 2, 3…, n

栈混洗问题:

这个公式的意义是,对**第一个入栈元素的出栈时机(即第一次栈为空的时机)**进行分类讨论:

比如对于1, 2, 3, 4… 进行操作序列push push pop pop …

栈的变化为

[1 ) 
[1, 2) 
[1 )
[)

此时k = 2, 它对应两次pop之后栈为空的情况。

可以看出,前k-1个元素出栈的顺序跟后n-k个元素出栈顺序无关

所以对于任意k,其所对应的总出栈情况为f(k-1)*f(n-k)

那么在1出栈之前,栈始终是非空的。所以并不可能在前k-1次pop之后,栈变空,并使重复的情况出现

括号匹配问题:

这里分类的依据是第一个左括号对应右括号的位置

其余分析与栈混洗类似,不再赘述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值