E132. Числа Каталана

e-maxx algorithm original: C/C++ #algorithm #combinatorics #emaxx #math
Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

Источник: e-maxx.ru/algo, страница PDF 427.

Числа Каталана — numberвая последовательность, встречающаяся в удивительном числе комбинаторных задач. Эта последовательность названа в честь бельгийского математика Каталана (Catalan), жившего в 19 веке, хотя на самом деле она была известна ещё Эйлеру (Euler), жившему за век до Каталана.

Последовательность

Первые несколько чисел Каталана

(начиная с нулевого): Числа Каталана встречаются в большом количестве задач комбинаторики. -ое number Каталана — это:

● Количество корректных скобочных последовательностей, состоящих из

открывающих и

закрывающих скобок.

● Количество корневых бинарных деревьев с

листьями (вершины не пронумерованы).

● Количество способов полностью разделить скобками

множитель.

● Количество триангуляций выпуклого

-угольника (т.е. количество разбиений многоугольника

непересекающимися диагоналями на треугольники).

● Количество способов соединить

точек на окружности

непересекающимися хордами.

● Количество неизоморфных полных бинарных деревьев с

внутренними vertexми (т.е. имеющими хотя бы одного сына).

● Количество монотонных путей из точки

в точку

в квадратной решётке размером

,

не поднимающихся над главной диагональю.

● Количество перестановок длины

, которые можно отсортировать стеком (можно показать, что перестановка является сортируемой стеком тогда и только тогда, когда нет таких индексов

, что

).

● Количество непрерывных разбиений множества из

elementов (т.е. разбиений на непрерывные блоки).

● Количество способов покрыть лесенку

с помощью

прямоугольников (имеется в виду фигура, состоящая из

столбцов,

-ый из которых имеет высоту

).

Вычисление

Имеется две формулы для чисел Каталана: рекуррентная и аналитическая. Поскольку мы считаем, что все приведённые выше задачи эквивалентны, то для доказательства формул мы будем выбирать ту задачу, с помощью которой это сделать проще всего.

Рекуррентная формула

Рекуррентную формулу легко вывести из задачи о правильных скобочных последовательностях. Самой левой открывающей скобке l соответствует определённая закрывающая скобка r, которая разбивает формулу две части, каждая из которых в свою очередь является правильной скобочной последовательностью. Поэтому, если

мы обозначим

, то для любого фиксированного

будет ровно

способов. Суммируя

это по всем допустимым

, мы и получаем рекуррентную зависимость на

.

Аналитическая формула

(здесь через

обозначен, как обычно, биномиальный коэффициент). Эту формулу проще всего вывести из задачи о монотонных путях. Общее количество монотонных путей в

решётке размером

равно

. Теперь посчитаем количество монотонных путей, пересекающих

диагональ. Рассмотрим какой-либо из таких путей, и найдём первое edge, которое стоит выше диагонали. Отразим относительно диагонали весь путь, идущий после этого ребра. В результате получим монотонный путь в

решётке

. Но, с другой стороны, любой монотонный путь в решётке

обязательно пересекает диагональ, следовательно, он получен как раз таким способом из какого-либо (причём единственного) монотонного пути, пересекающего диагональ, в решётке

. Монотонных путей

в решётке

имеется

. В результате получаем формулу:

C# lời giải

bản nháp tự động, xem lại trước khi gửi
// C# draft for: Числа Каталана
// Original e-maxx article has no compact code listing in the extracted PDF text.

C++ lời giải

đã khớp/gốc
// C++ source for: Числа Каталана
// Compact code block was not extracted from this article.

Java lời giải

bản nháp tự động, xem lại trước khi gửi
// Java draft for: Числа Каталана
// Original e-maxx article has no compact code listing in the extracted PDF text.

Материал разбит как Thuật toánическая Bài toán: изучить постановку, понять асимптотику и реализовать Thuật toán на выбранном языке.

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.