Теоретический материал
Числа Каталана
Можно дать и точное определение правильной скобочной последовательности.
- Пустая последовательность (то есть не содержащая ни одной скобки) является правильной скобочной последовательностью.
- Если «A» -- правильная скобочная последовательность, то «(A)» (последовательность A, взятая в скобки) -- правильная скобочная последовательность.
- Если «A» и «B» -- правильные скобочные последовательности, то «AB» (подряд записанные последовательности A и B) -- правильная скобочная последовательность.
Обозначим количество правильных скобочных последовательностей длины 2n (то есть содержащих n открывающихся и n закрывающихся скобок) через Cn и решим задачу нахождения Cn по заданной величине n.
Для небольших n значения Cn несложно вычислить полным перебором. C0 = 1 (правильная скобочная последовательность длины 0 ровно одна -- пустая), C1 = 1 (последовательность «()»), C2 = 2 (последовательности «(())» и «()()»), C3 = 5 («((()))», «(()())», «(())()», «()(())», «()()()»).
Запишем рекуррентную формулу для Cn. Пусть X -- произвольная правильная скобочная последовательность длины 2n. Она начинается с открывающейся скобки. Найдем парную ей закрывающуюся скобку и представим последовательность X в виде:
Напишем функцию, вычисляющую значение Cn по данному n:
int Catalan(int n)
{
int C[n+1];
// Создаем массив для хранения C[m]
C[0]=1;
for (int m=1; m<=n; ++m) // Вычисляем C[m] для m=1..n
{
C[m]=0;
for (int k=0; k<m; ++k)
C[m]+=C[k]*C[m-1-k];
}
return C[n];
}
Мы назвали функцию Catalan, поскольку значения Cn называются числами Каталана в честь бельгийского математика XIX века Евгения Шарля Каталана. Начало ряда чисел Каталана выглядит следующим образом:
n | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Cn | 1 | 1 | 2 | 5 | 14 | 42 | 132 | 429 | 1430 | 4862 | 16796 |
Для чисел Каталана хорошо известна и нерекуррентная формула:


Более подробно про правильные скобочные последовательности а также элементарное доказательство данной формулы можно прочесть в [1, 2.6-7].