Наименьший общий предок (LCA)

1 minute read

Ниже представлено описание задачи, приведены ссылки на сторонние ресурсы с материалами, а также на упражнения, которые можно решить для практики по данной теме.

Задача поиска наименьшего общего предка в общем виде формулируется следующим образом:

Пусть задано дерево , подвесим его за некоторую вершину и назовём её корнем. Требуется для данных вершин и найти наиболее удалённую от корня дерева вершину, лежащую на обоих путях от и до корня.

Алгоритмы решения

Алгоритм на построение, на запрос

Описание тривиального алгоритма:

Обходом в глубину посчитаем глубину каждой вершины дерева. Напомню, что глубиной называется длина пути до вершины от корня дерева. Дальше для вершин и рассмотрим всех предков с одинаковой глубиной, из одинаковых предков возьмём ту вершину, глубина которой больше.

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

Алгоритм на построение, на запрос

Одним из самых простых быстрых алгоритмов нахождения LCA является «Метод двоичного подъема». Почитать описание и посмотреть примеры реализации можно здесь:

Алгоритмы на построение, или на запрос

Алгоритмы, основанные на сведении задачи LCA к задаче поиска минимума на отрезке (RMQ). Почитать подробнее можно здесь:

Алгоритм на построение, на запрос (алгоритм Фарах-Колтона и Бендера)

Задачи

Простые

Средние

Сложные

Leave a Comment

Your email address will not be published. Required fields are marked *

Loading...