数学:使用一个堆栈查找排列数

发布于 2024-10-12 04:20:50 字数 426 浏览 5 评论 0原文

我猜这更像是一个数学问题,与编程无关。

假设我有一个堆栈并且我想找到数字1的排列 ,2,3,...n。 我可以pushpop。 例如,如果 n=2: push,pop,push,pop 1,2 和 push,push,pop,pop 2,1

如果 n=4 我只能得到 <使用 stack24 排列中选择 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星光不落少年眉 2024-10-19 04:20:50

这样的函数是一个加泰罗尼亚数。有关公式,请参阅 http://en.wikipedia.org/wiki/Catalan_number

Such function is a Catalan number. See http://en.wikipedia.org/wiki/Catalan_number for the formula.

甜扑 2024-10-19 04:20:50

我认为有一些非常简单的公式。您正在寻找 N 压入操作(“X”)和 N 弹出操作(“Y”)操作的排列,遵循一个简单的规则:

  • 空堆栈上不弹出操作(fe Y.... 和 XXYYY... 无效)

也许一些递归定义有帮助:

function F(n_push, n_pop) {
  int total_count = 0;

  if (n_push > 0) total_count += F(n_push - 1, n_pop);
  if (n_pop > n_push) total_count += F(n_push, n_pop - 1);

  return total_count;
}

I think there is some quite easy formula for that. You're looking for permutations of N push operations ("X") and N pop ("Y") operations, following one simple rule:

  • No pop on an empty stack (f.e. Y.... and XXYYY... are invalid)

Perhaps some recursive definition helps:

function F(n_push, n_pop) {
  int total_count = 0;

  if (n_push > 0) total_count += F(n_push - 1, n_pop);
  if (n_pop > n_push) total_count += F(n_push, n_pop - 1);

  return total_count;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文