$N^text{th}$ (in lexicographical order) term of balanced brackets string
up vote
9
down vote
favorite
We have the following balanced brackets permutations of length $4cdot2$ in lexicographical order:
1. (((())))
2. ((()()))
3. ((())())
4. ((()))()
5. (()(()))
6. (()()())
7. (()())()
8. (())(())
9. (())()()
10. ()((()))
11. ()(()())
12. ()(())()
13. ()()(())
14. ()()()()
And I want to print for example 7th term which is: $(()())()$ without calculating 6 previous terms. Any ideas how to do it in $mathcal{O}(n)$ time? ($n$ = number of pairs of brackets)
I know that number of all these terms is $C(n)$ ($n^text{th}$ Catalan number) but it didn't help me with finding efficient algorithm.
Any hints will be helpful.
Edit: Provide yourself with more examples with this generator - https://ideone.com/5s4S3 .
permutations catalan-numbers
add a comment |
up vote
9
down vote
favorite
We have the following balanced brackets permutations of length $4cdot2$ in lexicographical order:
1. (((())))
2. ((()()))
3. ((())())
4. ((()))()
5. (()(()))
6. (()()())
7. (()())()
8. (())(())
9. (())()()
10. ()((()))
11. ()(()())
12. ()(())()
13. ()()(())
14. ()()()()
And I want to print for example 7th term which is: $(()())()$ without calculating 6 previous terms. Any ideas how to do it in $mathcal{O}(n)$ time? ($n$ = number of pairs of brackets)
I know that number of all these terms is $C(n)$ ($n^text{th}$ Catalan number) but it didn't help me with finding efficient algorithm.
Any hints will be helpful.
Edit: Provide yourself with more examples with this generator - https://ideone.com/5s4S3 .
permutations catalan-numbers
The Catalan numbers count a lot of things, e.g., number of ways to triangulate a polygon. Perhaps one of these has a natural and easily computable ordering which you could use to induce an ordering on the balanced strings of brackets.
– Gerry Myerson
Aug 30 '12 at 2:40
5
This problem is discussed at some length in volume 4A of Knuth The Art of Computer Programming, in the section "enumerating all trees".
– MJD
Aug 30 '12 at 3:02
Thanks. It's called algorithm U and here it is: imageshack.us/photo/my-images/832/knuth.png . But can You explain it? Or at least reverse it as it works for '('>')' ? I could ofc subtract n from C(n), but as You know Catalan numbers are pretty big.
– user1
Aug 31 '12 at 0:09
Related question.
– Librecoin
May 29 '13 at 16:10
add a comment |
up vote
9
down vote
favorite
up vote
9
down vote
favorite
We have the following balanced brackets permutations of length $4cdot2$ in lexicographical order:
1. (((())))
2. ((()()))
3. ((())())
4. ((()))()
5. (()(()))
6. (()()())
7. (()())()
8. (())(())
9. (())()()
10. ()((()))
11. ()(()())
12. ()(())()
13. ()()(())
14. ()()()()
And I want to print for example 7th term which is: $(()())()$ without calculating 6 previous terms. Any ideas how to do it in $mathcal{O}(n)$ time? ($n$ = number of pairs of brackets)
I know that number of all these terms is $C(n)$ ($n^text{th}$ Catalan number) but it didn't help me with finding efficient algorithm.
Any hints will be helpful.
Edit: Provide yourself with more examples with this generator - https://ideone.com/5s4S3 .
permutations catalan-numbers
We have the following balanced brackets permutations of length $4cdot2$ in lexicographical order:
1. (((())))
2. ((()()))
3. ((())())
4. ((()))()
5. (()(()))
6. (()()())
7. (()())()
8. (())(())
9. (())()()
10. ()((()))
11. ()(()())
12. ()(())()
13. ()()(())
14. ()()()()
And I want to print for example 7th term which is: $(()())()$ without calculating 6 previous terms. Any ideas how to do it in $mathcal{O}(n)$ time? ($n$ = number of pairs of brackets)
I know that number of all these terms is $C(n)$ ($n^text{th}$ Catalan number) but it didn't help me with finding efficient algorithm.
Any hints will be helpful.
Edit: Provide yourself with more examples with this generator - https://ideone.com/5s4S3 .
permutations catalan-numbers
permutations catalan-numbers
edited May 29 '13 at 16:10
Librecoin
2,375724
2,375724
asked Aug 30 '12 at 2:08
user1
16317
16317
The Catalan numbers count a lot of things, e.g., number of ways to triangulate a polygon. Perhaps one of these has a natural and easily computable ordering which you could use to induce an ordering on the balanced strings of brackets.
– Gerry Myerson
Aug 30 '12 at 2:40
5
This problem is discussed at some length in volume 4A of Knuth The Art of Computer Programming, in the section "enumerating all trees".
– MJD
Aug 30 '12 at 3:02
Thanks. It's called algorithm U and here it is: imageshack.us/photo/my-images/832/knuth.png . But can You explain it? Or at least reverse it as it works for '('>')' ? I could ofc subtract n from C(n), but as You know Catalan numbers are pretty big.
– user1
Aug 31 '12 at 0:09
Related question.
– Librecoin
May 29 '13 at 16:10
add a comment |
The Catalan numbers count a lot of things, e.g., number of ways to triangulate a polygon. Perhaps one of these has a natural and easily computable ordering which you could use to induce an ordering on the balanced strings of brackets.
– Gerry Myerson
Aug 30 '12 at 2:40
5
This problem is discussed at some length in volume 4A of Knuth The Art of Computer Programming, in the section "enumerating all trees".
– MJD
Aug 30 '12 at 3:02
Thanks. It's called algorithm U and here it is: imageshack.us/photo/my-images/832/knuth.png . But can You explain it? Or at least reverse it as it works for '('>')' ? I could ofc subtract n from C(n), but as You know Catalan numbers are pretty big.
– user1
Aug 31 '12 at 0:09
Related question.
– Librecoin
May 29 '13 at 16:10
The Catalan numbers count a lot of things, e.g., number of ways to triangulate a polygon. Perhaps one of these has a natural and easily computable ordering which you could use to induce an ordering on the balanced strings of brackets.
– Gerry Myerson
Aug 30 '12 at 2:40
The Catalan numbers count a lot of things, e.g., number of ways to triangulate a polygon. Perhaps one of these has a natural and easily computable ordering which you could use to induce an ordering on the balanced strings of brackets.
– Gerry Myerson
Aug 30 '12 at 2:40
5
5
This problem is discussed at some length in volume 4A of Knuth The Art of Computer Programming, in the section "enumerating all trees".
– MJD
Aug 30 '12 at 3:02
This problem is discussed at some length in volume 4A of Knuth The Art of Computer Programming, in the section "enumerating all trees".
– MJD
Aug 30 '12 at 3:02
Thanks. It's called algorithm U and here it is: imageshack.us/photo/my-images/832/knuth.png . But can You explain it? Or at least reverse it as it works for '('>')' ? I could ofc subtract n from C(n), but as You know Catalan numbers are pretty big.
– user1
Aug 31 '12 at 0:09
Thanks. It's called algorithm U and here it is: imageshack.us/photo/my-images/832/knuth.png . But can You explain it? Or at least reverse it as it works for '('>')' ? I could ofc subtract n from C(n), but as You know Catalan numbers are pretty big.
– user1
Aug 31 '12 at 0:09
Related question.
– Librecoin
May 29 '13 at 16:10
Related question.
– Librecoin
May 29 '13 at 16:10
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
Here is an implementation of Algorithm-U in Java. However, I have simply subtracted $N$ from $C(n)$.
public static String genNthBalParStr(int numPairs, int N) {
int q, p, c, c1, m;
String str = "";
q = numPairs;
m = p = c = 1;
while (p < numPairs) {
p = p + 1;
c = ((4 * p - 2) * c)/(p + 1);
}
N = c - (N - 1);
while (true) {
if (q != 0) {
c1 = ((q + 1) * (q - p) * c)/((q + p) * (q - p + 1));
if (N > c1) {
p = p - 1;
c = c - c1;
N = N - c1;
str += "(";
m = m + 1;
}
else {
q = q - 1;
c = c1;
str += ")";
m = m + 1;
}
}
else break;
}
return str;
}
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
Here is an implementation of Algorithm-U in Java. However, I have simply subtracted $N$ from $C(n)$.
public static String genNthBalParStr(int numPairs, int N) {
int q, p, c, c1, m;
String str = "";
q = numPairs;
m = p = c = 1;
while (p < numPairs) {
p = p + 1;
c = ((4 * p - 2) * c)/(p + 1);
}
N = c - (N - 1);
while (true) {
if (q != 0) {
c1 = ((q + 1) * (q - p) * c)/((q + p) * (q - p + 1));
if (N > c1) {
p = p - 1;
c = c - c1;
N = N - c1;
str += "(";
m = m + 1;
}
else {
q = q - 1;
c = c1;
str += ")";
m = m + 1;
}
}
else break;
}
return str;
}
add a comment |
up vote
0
down vote
Here is an implementation of Algorithm-U in Java. However, I have simply subtracted $N$ from $C(n)$.
public static String genNthBalParStr(int numPairs, int N) {
int q, p, c, c1, m;
String str = "";
q = numPairs;
m = p = c = 1;
while (p < numPairs) {
p = p + 1;
c = ((4 * p - 2) * c)/(p + 1);
}
N = c - (N - 1);
while (true) {
if (q != 0) {
c1 = ((q + 1) * (q - p) * c)/((q + p) * (q - p + 1));
if (N > c1) {
p = p - 1;
c = c - c1;
N = N - c1;
str += "(";
m = m + 1;
}
else {
q = q - 1;
c = c1;
str += ")";
m = m + 1;
}
}
else break;
}
return str;
}
add a comment |
up vote
0
down vote
up vote
0
down vote
Here is an implementation of Algorithm-U in Java. However, I have simply subtracted $N$ from $C(n)$.
public static String genNthBalParStr(int numPairs, int N) {
int q, p, c, c1, m;
String str = "";
q = numPairs;
m = p = c = 1;
while (p < numPairs) {
p = p + 1;
c = ((4 * p - 2) * c)/(p + 1);
}
N = c - (N - 1);
while (true) {
if (q != 0) {
c1 = ((q + 1) * (q - p) * c)/((q + p) * (q - p + 1));
if (N > c1) {
p = p - 1;
c = c - c1;
N = N - c1;
str += "(";
m = m + 1;
}
else {
q = q - 1;
c = c1;
str += ")";
m = m + 1;
}
}
else break;
}
return str;
}
Here is an implementation of Algorithm-U in Java. However, I have simply subtracted $N$ from $C(n)$.
public static String genNthBalParStr(int numPairs, int N) {
int q, p, c, c1, m;
String str = "";
q = numPairs;
m = p = c = 1;
while (p < numPairs) {
p = p + 1;
c = ((4 * p - 2) * c)/(p + 1);
}
N = c - (N - 1);
while (true) {
if (q != 0) {
c1 = ((q + 1) * (q - p) * c)/((q + p) * (q - p + 1));
if (N > c1) {
p = p - 1;
c = c - c1;
N = N - c1;
str += "(";
m = m + 1;
}
else {
q = q - 1;
c = c1;
str += ")";
m = m + 1;
}
}
else break;
}
return str;
}
edited Aug 19 '15 at 4:32
user147263
answered Nov 3 '13 at 3:09
Arghya Kusum Das
1
1
add a comment |
add a comment |
Thanks for contributing an answer to Mathematics Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmath.stackexchange.com%2fquestions%2f188634%2fn-textth-in-lexicographical-order-term-of-balanced-brackets-string%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
The Catalan numbers count a lot of things, e.g., number of ways to triangulate a polygon. Perhaps one of these has a natural and easily computable ordering which you could use to induce an ordering on the balanced strings of brackets.
– Gerry Myerson
Aug 30 '12 at 2:40
5
This problem is discussed at some length in volume 4A of Knuth The Art of Computer Programming, in the section "enumerating all trees".
– MJD
Aug 30 '12 at 3:02
Thanks. It's called algorithm U and here it is: imageshack.us/photo/my-images/832/knuth.png . But can You explain it? Or at least reverse it as it works for '('>')' ? I could ofc subtract n from C(n), but as You know Catalan numbers are pretty big.
– user1
Aug 31 '12 at 0:09
Related question.
– Librecoin
May 29 '13 at 16:10