常规分析(如果对下面的分析感觉比较迷惑的,可以看看下面这个分析http://blog.csdn.net/wind__fantasy/article/details/5398358)

首先,我们设f(n)=序列个数为n的出栈序列种数。同时,我们假定,从开始到栈第一次出到空为止,这段过程中第一个出栈的序数是k。特别地,如果栈直到整个过程结束时才空,则k=n

首次出空之前第一个出栈的序数k将1~n的序列分成两个序列,其中一个是1~k-1,序列个数为k-1,另外一个是k+1~n,序列个数是n-k。

此时,我们若把k视为确定一个序数,那么根据乘法原理,f(n)的问题就等价于——序列个数为k-1的出栈序列种数乘以序列个数为n - k的出栈序列种数,即选择k这个序数的f(n)=f(k-1)×f(n-k)。而k可以选1到n,所以再根据加法原理,将k取不同值的序列种数相加,得到的总序列种数为:f(n)=f(0)f(n-1)+f(1)f(n-2)+……+f(n-1)f(0)。

看到此处,再看看卡特兰数的递推式,答案不言而喻,即为f(n)=h(n)= C(2n,n)/(n+1)= c(2n,n)-c(2n,n+1)(n=0,1,2,……)。

最后,令f(0)=1,f(1)=1。

非常规分析(比较容易理解)

对于每一个数来说,必须进栈一次、出栈一次。我们把进栈设为状态‘1’,出栈设为状态‘0’。n个数的所有状态对应n个1和n个0组成的2n位二进制数。由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。

在2n位二进制数中填入n个1的方案数为c(2n,n),不填1的其余n位自动填0。从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。

不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2(n-m)-1位上有n-m个 1和n-m-1个0。如若把后面这2(n-m)-1位上的0和1互换,使之成为n-m个0和n-m-1个1,结果得1个由n+1个0和n-1个1组成的2n位数,即一个不合要求的数对应于一个由n+1个0和n-1个1组成的排列。

反过来,任何一个由n+1个0和n-1个1组成的2n位二进制数,由于0的个数多2个,2n为偶数,故必在某一个奇数位上出现0的累计数超过1的累计数。同样在后面部分0和1互换,使之成为由n个0和n个1组成的2n位数,即n+1个0和n-1个1组成的2n位数必对应一个不符合要求的数。

因而不合要求的2n位数与n+1个0,n-1个1组成的排列一一对应。

显然,不符合要求的方案数为c(2n,n+1)。由此得出输出序列的总数目=c(2n,n)-c(2n,n+1)=c(2n,n)/(n+1)=h(n+1)。

转载于:https://www.cnblogs.com/cquljw/archive/2013/03/09/2951579.html

(学习日记)关于a1,a2,a3,...,an共n个元素依次入栈其可能出栈的排列数的计算(catalan数)...相关推荐

  1. A0/A1/A2/A3/A4图纸大小分别是多少

    原文地址::http://zhidao.baidu.com/question/291959816.html 我们国家的标准是按A0,A1...来分的,美国标准是按A,B,C,D,E来分的. A0=11 ...

  2. A1,A2,A3,A4纸的尺寸

    A1,A2,A3,A4纸的尺寸谁知道阿? 悬赏分:0 - 解决时间:2006-11-21 15:51 急用 提问者: 夕峰客 - 举人 四级 最佳答案 A0=1189*841 A1=841*594 A ...

  3. A1,A2,A3,A4纸的尺寸大小|A4纸与分辨率的关系|像素换算|ABC号纸尺寸|纸张幅面规格

    纸张幅面规格: 纸张的规格是指纸张制成后,经过修整切边,裁成一定的尺寸.过去是以多少"开"(例如8开或16开等)来表示纸张的大小,现在我采用国际标准,规定以A0.A1.A2.B1. ...

  4. NR Measurements-- 切换测量A1 A2 A3 A4 A5 B1 B2

    NR的切换机制和LTE几乎一样,大部分情况下采取基站控制,终端辅助完成: 第一步:基站向UE 下发测量控制 measConfig,测量控制以measId的形式下发给UE,每个measId包括两个元素: ...

  5. (a1,a2,a3,...,an-2,an-1,an)排列成(a1,an,a2,an-1,a3,an-2)

    /*设线性表L=(a1,a2,a3,...,an-2,an-1,an)采用带头结点的单链表保存,链表的结构为data.next.请设计一个 空间复杂度为O(1)且时间上尽可能高效的算法,重新排列L中的 ...

  6. {转帖]图纸A0,A1,A2,A3,A4实际尺寸是多少?长和宽怎么分

    A4(16k)297mm×210mm A3(8k)尺寸尚未定入,但普遍用420mm×297mm A2(2k)420mm×594mm A1 840mm*597mm A0 1194mm*840mm

  7. CAD如何绘制A0/A1/A2/A3/A4图框?

    在CAD制图时,设计师一般会使用企业的定制图框模板或者个人的特色图框模板,让设计方案更加标准化.规范化.对于新人设计师而言,完成CAD制图已经非常头疼了,图框的绘制更是手忙脚乱.那么是否有更加高效的方 ...

  8. 给定一个递增序列,a1 a2 ...an 。定义这个序列的最大间隔为d=max{ai+1 - ai }(1≤in),现在要从a2 ,a3 ..an-1 中删除一个元素。问剩余序列的最大间隔最小...

    // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<vector> ...

  9. 类C语言--栈与队列习题:设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常

    此代码可以正常运行,下附有运行区,是实实在在的类C语言 #include <stdio.h> #include <stdlib.h> #include<string.h& ...

最新文章

  1. oracle省市表,省市之一 创建全国省市Sql表
  2. PHP全栈学习笔记20
  3. Matplotlib绘制简单函数的梯度下降法
  4. java中==和equals的区别
  5. 年度总结和计划:去年4个1,今年5个1
  6. id 的选择器为什么要这么写 li#first?
  7. 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?
  8. windows mobile 开发 web service 未能建立与网络的连接、无法连接到远程服务器
  9. sdoi2017 r1 不堪回首
  10. efi分区能不能删除 win10_Win10不小心把EFI分区删除怎么恢复?
  11. 达梦8基础对象操作管理
  12. 【论文阅读】8-Non-local Scan Consolidation for 3D Urban Scenes
  13. 生于忧患,死于安乐。
  14. linux区分物理机和虚拟机,如何判断linux服务器是虚拟机还是物理机
  15. Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的区别
  16. 从开发转网络安全工程师一点不后悔,兴趣大于一切!
  17. 衡量视频质量的新标准ITU-T P.1203、P.1204
  18. 多目标优化问题MOP
  19. python 贪吃蛇大作战_Python 实现 贪吃蛇大作战 代码分享
  20. web,java,poi导出excel

热门文章

  1. flink sql的datastream与dataset初始化代码汇总
  2. No plugin found for prefix ‘scala‘ pom.xml
  3. java获取服务器信息返回前端,java程序获取linux服务器进程信息
  4. SpringMVC架构---SpringMVC学习笔记(一)
  5. Activity跳转的数据交换问题---Activity学习笔记(二)
  6. 关于EF使用脏读(连接会话开始执行设置隔离级别)
  7. 用PHP写一个最简单的解释器Part1
  8. Exchange 2010 数据库副本加载后复制状态一直是失败并搁置故障分析
  9. Android 自己定义View须要重写ondraw()等方法
  10. centos(7) 使用yum进行安装lamp环境