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# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

宝塔安装的MySQL无法连接的情况及解决方案

《宝塔安装的MySQL无法连接的情况及解决方案》宝塔面板是一款流行的服务器管理工具,其中集成的MySQL数据库有时会出现连接问题,本文详细介绍两种最常见的MySQL连接错误:“1130-Hostisn... 目录一、错误 1130:Host ‘xxx.xxx.xxx.xxx’ is not allowed

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

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