n个数的入栈和出栈

ameba 2003-04-01 09:28:06
1.2...n个数,压栈次序为从小到大,出栈次序任意。有哪些种情况不能出现。
例:n=3时,全部情况为3!种
1 2 3 1压栈出栈 2压栈出栈 3压栈出栈
1 3 2 1压栈出栈 2压栈 3压栈出栈 2出栈
2 1 3 1压栈 2压栈出栈 1出栈 3压栈出栈
2 3 1 1压栈 2压栈出栈 3压栈出栈 1出栈
3 1 2
3 2 1 1压栈 2压栈 3压栈出栈 2出栈 1出栈
其中3 1 2不可能出现。
请给出n个数的模型(有多少种情况不能出现)。
...全文
319 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
azuretttc 2003-04-03
  • 打赏
  • 举报
回复
当然是catalan数了,而且ZHANGYV说的没错,是和二叉数的计数问题等价的,这是组合数学的经典问题!
diabloqin 2003-04-03
  • 打赏
  • 举报
回复
up
ZhangYv 2003-04-03
  • 打赏
  • 举报
回复
楼上的用事实说话...
kingchar 2003-04-03
  • 打赏
  • 举报
回复
不是catalan函數!!!
Riemann 2003-04-02
  • 打赏
  • 举报
回复
C(n,k)表示从n个数中取k个数的组合数。
Riemann 2003-04-02
  • 打赏
  • 举报
回复
对正确出栈顺序的个数,存在如下递推关系式:
f(n+1) = C(n,0)*f(n)+C(n,1)*f(n-1)+...+C(n,n-1)*f(1)+C(n,n)*f(0)
这里f(n)表示对于n个数的情况,正确出栈顺序的个数,初值条件为f(0)=1;
得到了正确的出栈顺序数,错误的用n!减之即可。

Riemann 2003-04-02
  • 打赏
  • 举报
回复
汗,我的表达式是有问题,你的没错。

ZhangYv 2003-04-02
  • 打赏
  • 举报
回复
肯定是你错啦,你看看这个公式对于出入栈的对不对:
|- 1 n = 0;
Sn = -| n-1
|- Σ S(i)S(n-i-1) n >= 1; 解递归方程即得Catalan数,C(2n,n)/(n+1)
i=0
Riemann 2003-04-02
  • 打赏
  • 举报
回复
to ZhangYv():
你是着算一算当n=5时正确出栈顺序的个数,在比较一下它和C(2n,n)/(n+1)的值。
你所给出的Catalan数仅仅是对不同构的树的计数,但这里的问题并不等价于求不同构的树数目。
Riemann 2003-04-02
  • 打赏
  • 举报
回复
to BlueSky2008():
事实正如你所说的那样。
ZhangYv 2003-04-02
  • 打赏
  • 举报
回复
n个数出入栈的次序实际上等同与有n个节点可以构造都少个二叉树。
答案是:有Catalan个: C(2n,n)/(n+1),则不满足条件的次序有n!-C(2n,n)/(n+1)。
BlueSky2008 2003-04-02
  • 打赏
  • 举报
回复
对这类题,我总结了一个方法:
设入栈序列编号为1,2,3,4...
则出栈序列中,若序号为n的元素出栈了,其后出栈的序号小于n的元素必按降序排列。
这个条件应该是充要的。
despider 2003-04-02
  • 打赏
  • 举报
回复
up

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧