一个栈进栈序列为1,2,3,…,n,有多少个不同的出栈序列

合集下载

卡特兰数三个通项公式的推导

卡特兰数三个通项公式的推导

卡特兰数三个通项公式的推导前提条件:有两种操作,一种操作的次数不能超过另外一个,或者是不能有交集这些操作的合法方案数,通常是卡特兰数情景:1)n个0和n个1构成的字串,所有的前缀子串1的个数不超过0的个数,求这样的字串个数向上的操作不超过向右的操作2)包含n组括号的合法式子:与情景1的练习:左括号对于0,右括号对应13)一个栈的进栈序列为1,2,3,…,m,有多少个不同的出栈序列 ?4)n个节点可以构造多少个不同的二叉树。

5)在圆上选择2n个点,将这些点成对连接起来所得到的n条弦不相交的方法数6)通过连结顶点而将n+2边的凸多边形分成n个三角形的方案数形式:1 12 5 14 42 132 429 1430……推导:一式:曲线救国。

1.求总路径数2.求非法3.相减得到合法step1总路径就是2n次操作里选n次向右的方案数 C 2 n nC_{2n}^{n} C2nnstep2对于y = x + 1,所有的非法路径都必然与其有一个交点。

从第一个交点开始路径对于y = x + 1对称路径会对称到终点为(n-1,n+1)的点。

所以非法路径数就是 C 2 n n −1 C_{2n}^{n-1} C2nn−1step3二者相减:到达点 ( n , n ) 的合法路径数就是 H n = C2 n n − C 2 n n − 1 到达点(n,n)的合法路径数就是H_n=C_{2n}^{n} - C_{2n}^{n-1} 到达点(n,n)的合法路径数就是Hn=C2nn−C2nn−1二式:1.明确需要配凑的式子: 1 n + 1 2 n ! n ! n ! ,即 C 2 n n \frac{1}{n+1}\frac{2n!}{n!n!},即C_{2n}^{n} n+11n!n!2n!,即C2nn2.一式写成阶乘形式3.提公因式提这个公因式 2 n ! n ! ( n − 1 ) ! ,得到 2 n ! n ! ( n −1 ) ! ∗ ( 1 n − 1 n + 1 ) 提这个公因式\frac{2n!}{n!(n-1)!},得到\frac{2n!}{n!(n-1)!}*(\frac{1}{n}-\frac{1}{n+1}) 提这个公因式n!(n−1)!2n!,得到n!(n−1)!2n!∗(n1−n+11)4.通分括号内的式子,再把提取出的公因式与之相乘。

组合数学5

组合数学5

1组合数学Combinatorics5神奇的序列5-1 Catalan 数清华大学马昱春•一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?1,2,3, 412341入,2 入,2出,1出3入,3出,4入,4出•一个栈(无穷大)的进栈序列为1,2,3,…,n ,有多少个不同的出栈序列?第一次为空时进行分步?1234第一次为空时有k 个元素出栈,即1出栈的序号;将1~n 的序列分成两个序列,其中一个是1~k -1共k -1个元素另外一个是k +1~n ,共n -k 个元素设f (n )是n 个元素的出栈序列数f (n )=f (k -1)*f (n -k )k =1~nf (n ) = f (0)*f (n -1) + f (1)*f (n -2) + .......+ f (n -2)*f (1) + f (n -1)*f (0)二叉树•n个节点构成的二叉树,共有多少种情形?•根肯定会占用一个结点,设T(i, j)表示根的左子树含i个结点,右子树含j个结点•除了根之外剩余的n-1个结点可以有如下的分配方式,T(0, n-1),T(1, n-2),...T(n-1, 0),。

•设问题的解为f(n),f(n) = f(0)*f(n-1) + f(1)*f(n-2) + .......+ f(n-2)*f(1) + f(n-1)*f(0)•假设f(0) = 1,那么f(1) = 1, f(2) = 2, f(3) = 5。

Catalan数•1751年欧拉在与哥德巴赫的通信中提出一个问题:–正n边形化分为不重叠的三角形有多少种方法?C(n) = C(0)*C(n-1) + C(1)*C(n-2) + .......+ C(n-2)*C(1) + C(0)*C(n-2)回顾历史•1758年,Johann Segner给出了欧拉问题的递推关系•1838年,研究热潮–Gabriel Lame给出完整证明和简洁表达式–Eugène Charles Catalan在研究汉诺塔时探讨了相关问题, 解决了括号表达式的问题.–……–1900 Eugen Netto在著作中将该数归功于Catalan.历史回顾•1988年以及1999年的文献研究表明实际上最初发现Catalan数的也不是Euler,–1753欧拉在解决凸包划分成三角形问题的时候,推出了Catalan数。

程序员习题

程序员习题
A.st.top!=-1; B.st.top= = -1;
C.t.top!=Maxsize-1;D.st.top== axsize-1;
14)递归模型f(n=f(n-1)+n (n>1)的递归出口是___________.
A..f(1)=0 B.f(1)=1C.f(0)=1 D.f(n)=n 15)经过以下队列运算后,队头的元素是____________.文档收集自网络,仅用于个人学习
A.jB.n-IC.z-i+1 D.不确定
6)已知一个栈的进栈序列是1,2,3,…..,n,其输出序列是p1,p2,……,pn,若p1=n,则p1的值是_____________.文档收集自网络,仅用于个人学习
A.IBn-ICn-i+1 D不确定
7)设n个元素的进栈序列为p1,p2,p3,……,pn,其输出序列为1,2,3,……,n,若pn=1,则pi(1<=i<=n-1)的值___________.文档收集自网络,仅用于个人学习
程序员习题
1)经过以下栈运算后,x的值是_____________。
InitStack(s); Push(s,a); Push(s,b); Pop(s,x); GetTop(s,x);文档收集自网络,仅用于个人学习
A. a B. b
C. 1 D. 0
2)经过以下栈运算后,StackEmpty(s)的值是___________。
2)说说线性表,栈和队列的异同。
3)设栈s和队列q的初始状态都为空,元素a,b,c,d,e和f依次通过栈s,一个元素出栈后既进入队列q,若6个元素出队的序列是bdcfea,则栈s的容量至少应该存多少个元素?文档收集自网络,仅用于个人学习
程序题:

习题1-9章

习题1-9章

※绪论一、填空题1. 一个计算机系统包括和两大部分。

2. 一种用助忆符号来表示机器指令的操作符和操作数的语言是。

3. 数据结构被形式地定义为(D, R),其中D是的有限集合,R是D 上的有限集合。

4. 数据结构包括数据的、数据的和数据的这三个方面的内容。

5. 数据结构按逻辑结构可分为两大类,它们分别是。

6. 线性结构中元素之间存在关系,树形结构中元素之间存在关系,图形结构中元素之间存在关系。

7.在线性结构中,第一个结点前驱结点,其余每个结点有且只有 1个前驱结点;最后一个结点后续结点,其余每个结点有且只有1个后续结点。

8. 在树形结构中,树根结点没有结点,其余每个结点有且只有个前驱结点;叶子结点没有结点,其余每个结点的后续结点数可以。

9. 在图形结构中,每个结点的前驱结点数和后续结点数可以。

10. 一个算法的效率可分为效率和效率。

11. 任何一个C程序都由和若干个被调用的其它函数组成。

12. 变量一经说明,就确定该变量的取值范围及。

二、选择题1. C语言中的常量可分为整型常量、实型常量、字符型常量及四种。

(A)符号常量(B)长整型常量(C)逻辑常量(D)二进制整数2. 非线性结构是数据元素之间存在一种A)一对多关系 B)多对多关系 C)多对一关系 D)一对一关系3. 数据结构中,与所使用的计算机无关的是数据的结构;A) 存储 B) 物理 C) 逻辑 D) 物理和存储4. 算法分析的目的是A) 找出数据结构的合理性 B) 研究算法中的输入和输出的关系C) 分析算法的效率以求改进 D) 分析算法的易懂性和文档性5. 算法分析的两个主要方面是A) 空间复杂性和时间复杂性 B) 正确性和简明性C) 可读性和文档性 D) 数据复杂性和程序复杂性6. 计算机算法指的是A) 计算方法 B) 排序方法 C) 解决问题的有限运算序列 D) 调度方法7. 计算机算法必须具备输入、输出和等5个特性。

A) 可行性、可移植性和可扩充性 B) 可行性、确定性和有穷性C) 确定性、有穷性和稳定性 D) 易读性、稳定性和安全性三、简答题1.数据结构和数据类型两个概念之间有区别吗?2. 简述线性结构与非线性结构的不同点。

已知一个栈的入栈序列是123

已知一个栈的入栈序列是123

已知一个栈的入栈序列是123...n,若pn=n
,使用栈的变换序列解释栈入栈序列
栈可以被认为是一种特殊的线性结构,在栈中只有另外一端可以进行操作,允许push (入栈)和pop(出栈)操作。

在栈中元素以“后进先出”的原则而存储,被称为先进后出(LIFO)。

在栈的变换序列中,如果已知一个栈的入栈序列是123...n,同时如果pn=n,则可以构建这样一个栈的变换序列:首先将1-n压入栈中,接下来顺序出栈,然后将n压入栈中,然后再次出栈,接着将n-1压入栈中,继续出栈。

依次重复出栈压入栈,最终获得完整的栈变换序列。

例如,若某个栈的入栈序列是12345,其pn=5,则我们可以构建栈的变换序列:1234-5-45321。

具体来讲,首先将1-5压入栈中,然后顺序出栈:12345,接下来将5压入栈,然后再次出栈:45,然后3压入栈,继续出栈:45321,最终完成整个变换序列。

总结一下,由一个栈的入栈序列123...n,以及pn=n可以构建出一个完整的栈变换序列。

具体步骤如下:先将1-n压入栈中,然后顺序出栈;继续将n压入栈中,然后再出栈;再依次将n-1,以及其他数字压入栈中,然后再次出栈,直到完成整个变换序列。

本科-数据结构本期末综合练习

本科-数据结构本期末综合练习

1.数据的物理结构(D )。

A •与数据的逻辑结构无关C.只包括数据元素间关系的表示B .仅仅包括数据元素的表示D .包括数据元素的表示和关系的表示D•至少有一个数据项为指针类型3.从n个数中选取最大元素,(CA •基本操作是数据元素间的交换C •算法的时间复杂度是0(n)4.线性表的顺序结构中,(C ))。

B •算法的时间复杂度是0(n2)D .需要进行(n+1)次数据元素间的比较D .顺序表B )(设头指针为head)oB. head->next= =NULLD . head!=NULL数据结构(本)期末综合练习期末综合练习一、单项选择题2•数据元素是数据的基本单位,它( C )A•只能有一个数据项组成B•至少有二个数据项组成C•可以是一个数据项也可以由若干个数据项组成A •逻辑上相邻的元素在物理位置上不一定相邻B •数据元素是不能随机访问的C .逻辑上相邻的元素在物理位置上也相邻D •进行数据元素的插入、删除效率较高5 •以下表中可以随机访问的是( D )oA .单向链表B .双向链表C •单向循环链表6.带头结点的单向链表为空的判断条件是(A . head = =NULLC. head->next= =head7.设顺序存储的线性表长度为n,对于删除操作,设删除位置是等概率的,则删除一个元素平均移动元素的次数为(A )A . (n+1)/2B . n C. 2n D . n-i8.线性结构中数据元素的位置之间存在( A )的关系。

A . 一对一B . 一对多C .多对多D .每一个元素都有一个直接前驱和一个直接后继9.设top是一个链栈的栈顶指针,栈中每个结点由一个数据域data和指针域next组成,设用x接收栈顶元素,则岀栈操作为(A )oA . x=top->data;top=top->next;B . top=top->next;x=top->data;C . x=top-> next;top=top-> data;D . top->next =top; x=top->data;10 .设顺序存储的线性表长度为n,要删除第i个元素,按课本的算法,当i= ( C )时,移动元素的次数为3A . 3B . n/2C . n-3D . 411.以下说法正确的是( C )oA .队列是后进先出B .栈的特点是后进后岀C .栈的删除和插入操作都只能在栈顶进行14 . 一个栈的进栈序列是 a ,b ,c ,d ,则栈的不可能的出栈序列是( AA. adbc B . bead C . ebadD . deba15 .设有一个12阶的对称矩阵(矩阵A 的第一个元素为 A ,采用压缩存储方式将其下三角部分以行序为主序存储到一维数组印,1,数组b 的下标从1开始),则矩阵b 中A 中第4行的元素在数组b 中的下A . 7< i < 10B . 11< i < 15C . 9< i < 14A . 2mC . 2m+1D . m/217 .设有一个带头结点的链队列,队列中每个结点由一个数据域data 和指针域next 组成,front 和rear 分别为链队列的头指针和尾指针,要执行出队操作,用 x 保存出队元素的值,p 为指向结点类型的指针,可执行如下操作: p=front->next;x=p->data;然后执行(B18.A . front=p->next; C front=p;以下说法不正确的是( D )°B . front->next=p->next; D . front->next =p; 19. 20. A .连通图 B .连通图C .连通图 G 一定存在生成树 G 的生成树中一定包含 G 的所有顶点G 的生成树中不一定包含 G 的所有边 G 的生成树可以是不连通的D .连通图散列查找的原理是(AA .在待查记录的关键字值与该记录的存储位置之间建立确定的对应关系B .按待查记录的关键字有序的顺序方式存储C .按关键字值的比较进行查找D .基于二分查找的方法 空串的长度为( A )°B . 1C . 221 .排序过程中,每一趟从无序子表中将一个待排序的记录按其关键字的大小放置到已经排好序的子序 列的适当位置,直到全部排好序为止,该排序算法是 (D ) °A .选择排序 C .冒泡排序B .快速排序 D .直接插入排序22 .采用顺序查找法对长度为 n 的线性表进行查找(不采用表尾设监视哨的方法),最坏的情况下要进行(B )次元素间的比较。

2020-2021学年《数据结构与算法》期末考试复习试题

2020-2021学年《数据结构与算法》期末考试复习试题

2020-2021学年《数据结构与算法》期末考试复习试题一、选择题。

1.在数据结构中,从逻辑上可以把数据结构分为 C 。

A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.内部结构和外部结构2.数据结构在计算机内存中的表示是指 A 。

A.数据的存储结构 B.数据结构 C.数据的逻辑结构 D.数据元素之间的关系3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。

A.逻辑 B.存储 C.逻辑和存储 D.物理4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。

A.数据的处理方法 B.数据元素的类型C.数据元素之间的关系 D.数据的存储方法5.在决定选取何种存储结构时,一般不考虑 A 。

A.各结点的值如何 B.结点个数的多少C.对数据有哪些运算 D.所用的编程语言实现这种结构是否方便。

6.以下说法正确的是 D 。

A.数据项是数据的基本单位B.数据元素是数据的最小单位C.数据结构是带结构的数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。

(1)A.找出数据结构的合理性 B.研究算法中的输入和输出的关系C.分析算法的效率以求改进 C.分析算法的易读性和文档性(2)A.空间复杂度和时间复杂度 B.正确性和简明性C.可读性和文档性 D.数据复杂性和程序复杂性8.下面程序段的时间复杂度是 O(n2) 。

s =0;for( I =0; i<n; i++)f or(j=0;j<n;j++)s +=B[i][j]; sum =s ;9.下面程序段的时间复杂度是 O(n*m) 。

for( i =0; i<n; i++)for(j=0;j<m;j++)A[i][j] = 0;10.下面程序段的时间复杂度是 O(log3n) 。

i = 0;while(i<=n)i = i * 3;11.在以下的叙述中,正确的是 B 。

数据结构复习题

数据结构复习题
else
return d;
}
1返回值:
2功能:
五.算法题(每题3分,共6分)
1.设计一个算法,判断链表中数据元素是否是递减的。
2.设某棵二叉树采用二叉链表作为存储,编写一递归算法求其叶结点数。
第一章绪论
一.选择题
1.下面关于算法说法正确的是()。
A.算法最终必须由计算机程序实现
B.为解决某问题的算法同为该问题编写的程序含义是相同的
A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表
5.在一个长度为n的顺序表中删除第i个元素(1<=i<=n)时,需向前移动()个元素
A.n-iB.n-i+lC.n-i-1D.i
6.从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较()个元素结点
3.线性表的顺序存储结构的优点是存储密度大,且插入、删除运算效率高。()
4.将一棵树转换为二叉树后,根结点没有左子树。()
5.完全二叉树中,若一个结点没有左孩子,则必是叶结点。()
四.简答题(每题2分,共4分)
1.简述下列算法的功能,并给出队列Q={12,34,25,4,8}在执行下列算法后的状态。
A.n/2B.nC.(n+1)/2D.(n-1)/2
7.设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为()
A.p->next=p->next->next;B.p=p->next;
C.p=p->next->next;D.p->next=p;
8.在一个单链表中,已知q结点是p结点的前趋结点,若在q和p之间插入s结点,则须执行()
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?[4-
]
常规分析
首先,我们设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)。

<此文件来自百度百科>
<来自百度>。

相关文档
最新文档