Reputation: 61
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
Upvotes: 3
Views: 992
Reputation: 49729
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:
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;
}
Upvotes: 0
Reputation: 47641
Such function is a Catalan number. See http://en.wikipedia.org/wiki/Catalan_number for the formula.
Upvotes: 3