【栈的应用】栈的出栈序列问题研究
来源:互联网 发布:js 面向对象 视频 编辑:程序博客网 时间:2024/05/01 09:12
在平日的关于栈学习当中,我们会经常遇到关于栈的出栈序列的问题。
虽然这些问题很多可以通过穷举法实现解决。
但是遇到了考试或者面试的时候,往往穷举法会花费大量的时间。
于是寻找类似问题的规律往往是更高效的解决办法。
在首先,我们先判断出栈的元素的顺序是否合法
一、出栈序列的合法化问题:
例题1:若元素进栈的 顺序为1-2-3-4,能否得到出栈序列为3-1-2-4?
分析:若出栈序列的首个元素为3,则可以知道在栈内的元素如下
(栈底)1-2(栈顶)。则第二个出栈元素可以是已在栈顶的2,也可以是在栈外的4。不可能是在非栈顶的1。
所以答案:否。
例题2:已知元素进栈序列为1-2-3-4,请问如何得到1-3-4-2的出栈序列?
分析:已知入栈和出栈首个元素是1,则可以知道元素1在进栈后立即出栈。则栈的操作为
入-出
第二个出栈的元素是3,则可以知道元素3在出栈时候栈内尚有元素2。则栈的操作为2入栈,3入栈,3出栈,得出操作序列
入-出-入-入-出
第三个出栈的元素是2,2则在栈顶,则可以知道下一个操作为出栈
入-出-入-入-出-出
最后一个元素为在栈外的4,则可以知道栈的操作为4入栈,4出栈,得出操作序列
入-出-入-入-出-出-入-出
例题3:证明入栈序列1-2-……-n,得到出栈序列A1-A2-A3-……An(是1、2…n的一种排列)的充要条件是:不存在i<j<k并且Aj<Ak<Ai。
(求证的充要条件的大意:在出栈序列中,若某后入栈的序列先出栈,不可能有比其先入栈的元素在该元素序列出栈后按入栈顺序出栈。
如在入栈序列1-2-3-4-5之中,不可能存在5-1-3这样的出栈子序列)
分析:
充分性:若该序列为出栈序列,则满足后入先出原则。在题设当中,我们可知道元素Ak比Aj后入栈,比Ai先入栈的情况并不符合后入先出的原罪。
(必要性反之亦然,该题目的关键在于指出出栈序列的中间元素比先出元素先入栈与比后出元素先入栈的矛盾)
因为该结与序列的出入栈关系互为充要条件,所以该结论可以作为判断出栈顺序合法性的主要依据,
那么,在已知入栈的元素数量为n的情况下要如何计算出栈的序列的种数呢
二、证明出栈序列的数量:
背景知识:卡塔兰数(以下来自百度百科)
递推式
若有新的问题将会补充,未完待续……
……………………………………………………我是分割线…………………………………………………………………………………………………………………………
本博客的用途为个人学习复习所用。
便于整理和回顾自己已经学习到的某些知识的细节
所研究问题涉及计算机的方方方面面。
首先从计算机学科的基础的数据结构开始。
望该博客能够发挥其作用。
- 【栈的应用】栈的出栈序列问题研究
- 可能的出栈序列问题
- 所有可能的出栈序列问题及卡塔兰数的应用
- 所有可能的出栈序列问题及卡塔兰数的应用
- 出栈序列问题
- 出栈序列的统计
- 出栈序列的统计
- 出栈序列的合法性
- 出栈序列的遍历
- 出栈序列的统计
- 出栈序列的可能性判定问题(PAT1051)
- 出栈序列问题归纳
- 【学院派】出栈序列问题
- 栈问题-根据入栈序列,得出可能的出栈序列
- 栈 入栈序列与出栈序列 合法性 的一个有趣问题
- [算法学习]栈的出栈序列
- 求所有的出栈序列
- 【数据结构】 出栈序列的合法性【面试】
- Lowest Common Ancestor of a Binary Search Tree
- 类与对象
- SublimeText3: ImportError: No module named ‘urllib2′ 的解决办法
- Leetcode# 36 Valid Sudoku
- 1028. 人口普查(20)
- 【栈的应用】栈的出栈序列问题研究
- HTTP::Request
- 阅读摘要
- Android: NDK编程入门笔记
- eclipse android 设置及修改生成apk的签名文件
- Dreamweaver cs6合理配色设置字体大小以提高代码阅读性
- 【整理】常用正则表达式
- 002-Scala函数定义、流程控制、异常处理入门实战
- 1029. 旧键盘(20)