当前课程知识点:数据结构(上) > 第四章 栈与队列 > (c3)栈应用:栈混洗 > 04C3-2 计数
那么对于长度为n的输入序列
可能得到的栈混洗总共有多少种呢?
假定输入栈A中共有n个元素
而且它们自顶向下
依次编号为1 2 3一直到n
这里我们需要将注意力放在第一个元素上
不难理解 它将首先被推入中转栈S中
那么接下来 我们要问的问题是
这个元素是在什么时候
被转入到最终的栈B中呢?
请注意 1号元素
既然作为第1个元素被推入S中
那么当它被弹出并进而推入栈B之后
栈S应该成为一个空栈
此时在栈B中
如果包括刚推入的1号元素
累计共有k个元素
那么相应地 在栈A中
就应该还留存有最靠后的n-k个元素
由此可见 此时B中最靠底的k-1个元素
和A中最靠底的n-k个元素
它们的栈混洗实际上是相互独立的
因此对应于1号元素 作为第k个元素
被推入B中的情况
累计而言 对应的栈混洗总数
就应该是这两个相互独立的子序列
所各自对应的栈混洗总数的乘积
而对于1号元素来说
k所有的可能取值
所对应的混洗数的总和
就应该恰好是我们最初
要计算的栈混洗总数
那么这里的k可以在什么范围内取值呢?
首先 k可以从1开始
也就是说 1号元素
直接作为第1个元素被转入栈B中
另一个极端 k也可能取值为n
也就是说 1号元素
作为最后一个元素被推入栈B中
至此 我们就得到了一个
非常典型的递推式
如果再考虑到它的平凡情况
也就是当只有1个元素的时候
对应的栈混洗数自然是1
那么就可以知道这个递推式的解
恰好是著名的catalan数
其数值等于2n的阶乘
除以n+1的阶乘 再除以n的阶乘
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验