数据结构的一道题
2016-06-25 20:14
288 查看
偶然看到的一个小题,差点被忽略了,题目大概是这样的:
a,b,c,三个元素依次入栈,问有多少种出栈顺序?
意思是入栈的顺序必须是a,b,c,我是这样想的,分三种情况,
1:a先出栈,即a入栈后就出栈,然后可以b入栈,出栈,c入栈,出栈,
那么出栈顺序就是a,b,c;
或者b入栈,c入栈,c出栈,b出栈,顺序为a,c,b
2:b先出栈,出栈顺序可以是b,c,a和b,a,c
3:c先出栈,由于入栈必须是a,b,c,所以出栈只能是c,b,a
所以这类题中三个元素有5种出栈顺序
如果把问题延伸呢?4个呢?5个呢?n个呢?
我搜了下,有些人真是高智商,https://en.wikipedia.org/wiki/Catalan_number这是他的详细解答
假设n个元素依次进栈,出栈的顺序有f(n)中,很容易得到:
f(1)=1;
f(2)=2;
f(3)=5;
为了方便,设f(0)=1;
结论就是:
f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+……+f(n-1)*f(0);
那么这么算就很简单了(为什么这么做我就不去探究了,也探究不出来,哪位有兴趣可以自己去试试),f(4)=f(0)*f(3)+f(1)*f(2)+f(2)*f(1)+f(3)*f(0)=5+2+2+5=14
a,b,c,三个元素依次入栈,问有多少种出栈顺序?
意思是入栈的顺序必须是a,b,c,我是这样想的,分三种情况,
1:a先出栈,即a入栈后就出栈,然后可以b入栈,出栈,c入栈,出栈,
那么出栈顺序就是a,b,c;
或者b入栈,c入栈,c出栈,b出栈,顺序为a,c,b
2:b先出栈,出栈顺序可以是b,c,a和b,a,c
3:c先出栈,由于入栈必须是a,b,c,所以出栈只能是c,b,a
所以这类题中三个元素有5种出栈顺序
如果把问题延伸呢?4个呢?5个呢?n个呢?
我搜了下,有些人真是高智商,https://en.wikipedia.org/wiki/Catalan_number这是他的详细解答
假设n个元素依次进栈,出栈的顺序有f(n)中,很容易得到:
f(1)=1;
f(2)=2;
f(3)=5;
为了方便,设f(0)=1;
结论就是:
f(n)=f(0)*f(n-1)+f(1)*f(n-2)+f(2)*f(n-3)+……+f(n-1)*f(0);
那么这么算就很简单了(为什么这么做我就不去探究了,也探究不出来,哪位有兴趣可以自己去试试),f(4)=f(0)*f(3)+f(1)*f(2)+f(2)*f(1)+f(3)*f(0)=5+2+2+5=14
相关文章推荐
- 单向链表的创建、节点删除、链表输出、翻转(写法参考计蒜客数据结构课程)
- 队列 线性队列
- JavaScript数据结构之数组
- ahoi2005 lane 航线规划
- Link-Cut Tree
- 数据结构(树套树):ZJOI 2013 K大数查询
- [数据结构]最小生成树
- [数据结构]贪婪算法(Dijkstra Algorithm)
- 复习(数据结构):线性表 : C
- 《算法竞赛入门经典》学习笔记 2.4.4 C++中的输入输出
- 数据结构1——线性表链式存储 java
- 数据结构上机实验之顺序查找(sdut_2040)
- 数据结构实验之查找六:顺序查找(sdut_3378)
- 数据结构8.广义表
- 数据结构
- 数据结构与算法分析 学习笔记(二)
- java数据结构(四)——栈
- 剑指offer-数据结构:字符串(基础知识)
- 共同学习Java源代码--数据结构--ArrayList类(七)
- 剑指offer-数据结构:数组和指针(基础知识)