N个元素进栈 出栈情况种数


在这里插入图片描述

1.逐一求解

面对此类问题 我们无法直接分析元素个数 为N的情况 通常我们都会逐一分析

设定一个函数 f(N):N为元素个数 f(N)为出栈顺序种数 

显然:

f(1) = 1:a

f(2) = 2:a,b b,a

f(3) = 5:a,b,c  a,c,b   b,a,c   b,c,a    /*c,a,b*/   c,b,a

f(4) = ?

当N为4时 问题趋于复杂 那么怎么解决呢?
我们从小就开始学数学 小学数学有一章是–找规律
很明显 这种问题就是找规律的
只不过有些规律难找 我们一一研究

接下来我会以新口吻来分析这个问题 各位一看便知
假定f(0) = 1

f(1) = 1:a
a第1个出栈 前面有0个出栈 后面有0个出栈  f(0) * f(0) = 1  f(1) = 1

f(2) = 2:a,b b,a
a第1个出栈 前面有0个出栈 后面有1个出栈  f(0) * f(1) = 1
a第2个出栈 前面有1个出栈 后面有0个出栈  f(1) * f(0) = 1   f(2) = 2

f(3) = 5:a,b,c  a,c,b   b,a,c   b,c,a    /*c,a,b*/   c,b,a
a第1个出栈 前面有0个出栈 后面有2个出栈  f(0) * f(2) = 2
a第2个出栈 前面有1个出栈 后面有1个出栈  f(1) * f(1) = 1
a第3个出栈 前面有2个出栈 后面有0个出栈  f(2) * f(0) = 2  f(3) = 5


f(4) = ?

类似于递归思想 将难解的大问题转换为易于求解的子问题 一一求解
那么f(4)是多少呢? 这时就很容易解决了

A第1个出栈,前面有0个出栈  后面有3个出栈    f(0) * f(3) = 5
A第2个出栈,前面有1个出栈  后面有2个出栈    f(1) * f(2) = 2
A第3个出栈,前面有2个出栈  后面有1个出栈    f(2) * f(1) = 2
A第4个出栈,前面有3个出栈  后面有0个出栈    f(3) * f(0) = 5  f(4) = 14

递推:

f(n) = f(0)f(n-1) + f(1)f(n-2) + .....+ f(n-1)f(0)

2.卡特兰数的引入

那么这个数等于多少呢?实际上 早有先人研究过这一类数学问题 这个数就是著名的卡特兰数
以下内容来源于百度卡特兰数

在这里插入图片描述
在这里插入图片描述

3.得出结论

n个元素进栈,出栈情况种数为

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿猿收手吧!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值