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

2023-10-09 18:04

本文主要是介绍N个元素进栈 出栈情况种数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.逐一求解
  • 2.卡特兰数的引入
  • 3.得出结论

在这里插入图片描述

1.逐一求解

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

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

显然:

f(1) = 1:af(2) = 2:a,b b,af(3) = 5:a,b,c  a,c,b   b,a,c   b,c,a    /*c,a,b*/   c,b,af(4) = ?

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

接下来我会以新口吻来分析这个问题 各位一看便知
假定f(0) = 1f(1) = 1:a
a第1个出栈 前面有0个出栈 后面有0个出栈  f(0) * f(0) = 1  f(1) = 1f(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) = 2f(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) = 5f(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个元素进栈,出栈情况种数为

在这里插入图片描述

这篇关于N个元素进栈 出栈情况种数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/174610

相关文章

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

查看Oracle数据库中UNDO表空间的使用情况(最新推荐)

《查看Oracle数据库中UNDO表空间的使用情况(最新推荐)》Oracle数据库中查看UNDO表空间使用情况的4种方法:DBA_TABLESPACES和DBA_DATA_FILES提供基本信息,V$... 目录1. 通过 DBjavascriptA_TABLESPACES 和 DBA_DATA_FILES

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL进阶之路索引失效的11种情况详析

《MySQL进阶之路索引失效的11种情况详析》:本文主要介绍MySQL查询优化中的11种常见情况,包括索引的使用和优化策略,通过这些策略,开发者可以显著提升查询性能,需要的朋友可以参考下... 目录前言图示1. 使用不等式操作符(!=, <, >)2. 使用 OR 连接多个条件3. 对索引字段进行计算操作4

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

遮罩,在指定元素上进行遮罩

废话不多说,直接上代码: ps:依赖 jquer.js 1.首先,定义一个 Overlay.js  代码如下: /*遮罩 Overlay js 对象*/function Overlay(options){//{targetId:'',viewHtml:'',viewWidth:'',viewHeight:''}try{this.state=false;//遮罩状态 true 激活,f