平衡的括号

时间:2014-09-25 20:57:59

标签: algorithm parentheses catalan

我想知道是否有人可以回答我,这是针对下一个问题在回溯解决方案中生成的结果数量:

给定n对括号,编写一个函数来生成格式正确的括号的所有组合。

例如,给定n = 3,解集是:

“((()))”,“(()())”,“(())()”,“()(())”,“()()()”

stackoverflow中有一个相关的帖子:Generate balanced parentheses in java

我怀疑,如果有一个公式可以给我一些有效的括号,我可以在计算之前生成。 例如:
- f(n):
- f(1)= 1
- f(2)= 2
- f(3)= 5
等等。

谢谢。

1 个答案:

答案 0 :(得分:4)

可以通过加泰罗尼亚数字计算包含正确匹配的n对括号的数字表达式。引用维基百科的相关link

  

组合系统中存在许多计数问题,其解决方案由加泰罗尼亚数字给出...... Cn是长度为2n的Dyck字数。 Dyck字是由n个X和n Y组成的字符串,这样字符串的初始段没有比X更多的Y ...将符号X重新解释为左括号,Y作为右括号,Cn计算表达式的数量包含正确匹配的n对括号。

第n个加泰罗尼亚数字直接根据二项式系数给出:

The nth Catalan number, image taken from Wikipedia