数学:使用一个堆栈查找排列数
我猜这更像是一个数学问题,与编程无关。
假设我有一个堆栈
并且我想找到数字1的
。 我可以排列
,2,3,...npush
和pop
。 例如,如果 n=2: push,pop,push,pop
1,2 和 push,push,pop,pop
2,1
如果 n=4 我只能得到 <使用 stack
从 24
排列中选择 code>14.. 有谁知道任何函数 F(n)
可以产生堆栈(只有一个)可以产生的排列
数量?例如 f(1)=1
f(2)=2
f(4)=14
It's more a math problem I guess, nothing programming.
Suppose I have a stack
and I want to find the permutations
of numbers 1,2,3,...n
.
I can push
and pop
.
e.g. if n=2: push,pop,push,pop
1,2 and push,push,pop,pop
2,1
if n=4 I can only get 14
from the 24
permutations using the stack
..
Does anyone know any function F(n)
that could produce the number of permutations
the stack (only one) can produce? eg
f(1)=1
f(2)=2
f(4)=14
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这样的函数是一个加泰罗尼亚数。有关公式,请参阅 http://en.wikipedia.org/wiki/Catalan_number。
Such function is a Catalan number. See http://en.wikipedia.org/wiki/Catalan_number for the formula.
我认为有一些非常简单的公式。您正在寻找
N
压入操作(“X”)和N
弹出操作(“Y”)操作的排列,遵循一个简单的规则:也许一些递归定义有帮助:
I think there is some quite easy formula for that. You're looking for permutations of
N
push operations ("X") andN
pop ("Y") operations, following one simple rule:Perhaps some recursive definition helps: