Jump to content

Самый низкий общий предок

В этом дереве низший общий предок узлов x и y отмечен темно-зеленым цветом. Другие общие предки показаны светло-зеленым цветом.

В теории графов и информатике наименьший общий предок ( LCA ) (также называемый наименьшим общим предком ) двух узлов v и w в дереве или ориентированном ациклическом графе (DAG) T — это самый низкий (т. е. самый глубокий) узел, который имеет оба узла v и w. и w как потомки, где мы определяем каждый узел как потомка самого себя (поэтому, если v имеет прямую связь с w , w является наименьшим общим предком).

LCA v и w в T — это общий предок v и w , расположенный дальше всего от корня. Вычисление наименьших общих предков может быть полезно, например, как часть процедуры определения расстояния между парами узлов в дереве: расстояние от v до w можно вычислить как расстояние от корня до v плюс расстояние от корня до w , минус удвоенное расстояние от корня до их низшего общего предка ( Джиджев, Панциу и Заролиагис 1991 ).

В древовидной структуре данных , где каждый узел указывает на своего родителя, наименьшего общего предка можно легко определить, найдя первое пересечение путей от v и w до корня. В общем, время вычислений, необходимое для этого алгоритма, составляет O(h), где h — высота дерева (длина самого длинного пути от листа до корня). Однако существует несколько алгоритмов обработки деревьев, позволяющих быстрее находить наименьших общих предков. автономный алгоритм наименьших общих предков Тарьяна Например, предварительно обрабатывает дерево за линейное время для обеспечения запросов LCA с постоянным временем. В общих группах DAG существуют аналогичные алгоритмы, но с суперлинейной сложностью.

Проблема наименьшего общего предка была сформулирована Альфредом Ахо , Джоном Хопкрофтом и Джеффри Уллманом ( 1973 ), но Дов Харел и Роберт Тарьян ( 1984 ) были первыми, кто разработал оптимально эффективную структуру данных наименьшего общего предка. Их алгоритм обрабатывает любое дерево за линейное время, используя декомпозицию тяжелых путей , так что на последующие запросы наименьшего общего предка можно ответить за постоянное время для каждого запроса. Однако их структура данных сложна и трудно реализуема. Тарьян также нашел более простой, но менее эффективный алгоритм, основанный на структуре данных поиска объединения , для вычисления наименьших общих предков автономной партии пар узлов .

Барух Шибер и Узи Вишкин ( 1988 ) упростили структуру данных Хареля и Тарьяна, что привело к реализуемой структуре с той же асимптотической предварительной обработкой и ограничениями времени запроса. Их упрощение основано на том принципе, что в двух особых видах деревьев легко определить наименьших общих предков: если дерево представляет собой путь, то наименьший общий предок можно вычислить просто по минимуму уровней двух запрашиваемых узлы, тогда как если дерево является полным двоичным деревом , узлы могут быть проиндексированы таким образом, что наименьшие общие предки сводятся к простым двоичным операциям с индексами. Структура Шибера и Вишкина разлагает любое дерево на набор путей, так что связи между путями имеют структуру двоичного дерева, и сочетает в себе оба этих двух более простых метода индексации.

Омер Беркман и Узи Вишкин ( 1993 ) открыли совершенно новый способ ответа на запросы с наименьшим общим предком, снова достигнув линейного времени предварительной обработки при постоянном времени запроса. Их метод включает в себя формирование эйлерова обхода графа, сформированного из входного дерева, путем удвоения каждого ребра и использование этого обхода для записи последовательности номеров уровней узлов в том порядке, в котором обход их посещает; запрос наименьшего общего предка затем может быть преобразован в запрос, который ищет минимальное значение, встречающееся в некотором подинтервале этой последовательности чисел. Затем они решают эту проблему запроса минимального диапазона (RMQ), комбинируя два метода: один метод основан на предварительном вычислении ответов на большие интервалы, размеры которых равны степеням двойки, а другой основан на поиске в таблице для запросов с небольшими интервалами. Позже этот метод был представлен в упрощенной форме Майклом Бендером и Мартином Фарах-Колтоном ( 2000 ). Как ранее заметили Габоу, Бентли и Тарьян (1984) , проблема минимума диапазона может, в свою очередь, быть преобразована обратно в проблему наименьшего общего предка, используя технику Декартовы деревья .

Дальнейшие упрощения были сделаны Alstrup et al. (2004) и Фишер и Хойн (2006) .

Слиатор и Тарьян ( 1983 ) предложили динамический вариант задачи LCA, в котором структура данных должна быть подготовлена ​​для обработки запросов LCA, смешанных с операциями, изменяющими дерево (то есть переупорядочивающими дерево путем добавления и удаления ребер). Этот вариант можно решить в время в общем размере дерева для всех модификаций и запросов. Это достигается путем обслуживания леса с использованием структуры данных динамических деревьев с разделением по размеру; затем это поддерживает декомпозицию каждого дерева по тяжелому-легкому принципу и позволяет выполнять запросы LCA за логарифмическое время в зависимости от размера дерева.

Решение LCA в деревьях в линейном пространстве и с постоянным временем поиска

[ редактировать ]

Как упоминалось выше, LCA можно свести к RMQ. Эффективное решение возникающей проблемы RMQ начинается с разделения числовой последовательности на блоки. Для запросов между блоками и внутри блоков используются два разных метода.

Сокращение с LCA до RMQ

[ редактировать ]

Сокращение LCA до RMQ начинается с обхода дерева. Для каждого посещенного узла последовательно записывайте его метку и глубину.Предположим, что узлы x и y находятся в позициях i и j в этой последовательности соответственно. Тогда LCA x и y будет найден в позиции RMQ( i , j ), где RMQ берется по значениям глубины.

Пример, показывающий, как LCA сводится к RMQ.

Алгоритм линейного пространства и постоянного времени поиска для RMQ, уменьшенный из LCA

[ редактировать ]

Несмотря на это, для общего RMQ существует решение с постоянным временем и линейным пространством , но можно применить упрощенное решение, использующее свойства LCA. Это упрощенное решение можно использовать только для RMQ, уменьшенного по сравнению с LCA.

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

Иллюстрация, показывающая проблему RMQ, разделена на блоки, каждый из которых имеет размер = b.

Разбив последовательность на блоки, Запрос можно решить, решив два разных случая:

Случай 1: если i и j находятся в разных блоках

[ редактировать ]

Чтобы ответить на запросе в первом случае заранее вычисляются 3 группы переменных, что помогает сократить время запроса.

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

Во-вторых, учитывая набор , запрос RMQ для этого набора предварительно вычисляется с использованием решения с постоянным временем и линейным пространством . Есть блоков, поэтому таблица поиска в этом решении принимает космос. Потому что , = космос. Следовательно, предварительно вычисленный запрос RMQ с использованием решения с постоянным временем и линейным пространством в этих блоках занимает всего космос.

В-третьих, в каждом блоке , позволять быть индексом в такой, что . Для всех от до , блокировать делится на два интервала и . Тогда минимальный элемент с наименьшим индексом для интервалов в и в каждом блоке предварительно вычисляется. Такие минимальные элементы называются префиксом min для интервала в и суффикс min для интервала в . Каждая итерация вычисляет пару префикса min и суффикса min. Следовательно, общее количество минут префикса и минут суффикса в блоке является . Поскольку существуют блоков, в сумме все массивы префиксов min и суффиксов min занимают который пространства.

В общей сложности потребуется пространство для хранения всех трех групп предварительно вычисленных переменных, упомянутых выше.

Поэтому, отвечая на запрос в случае 1 просто задает минимум следующие три вопроса:

Позволять быть блоком, содержащим элемент по индексу , и для индекса .

  1. Суффикс мин в в блоке
  2. Ответ на запрос RMQ для подмножества из блоков используя решение с постоянным временем и линейным пространством
  3. Префикс мин в в блоке

На все 3 вопроса можно ответить в постоянное время. Следовательно, на случай 1 можно ответить в линейном пространстве и постоянном времени.

Случай 2: если я и j находятся в одном блоке

[ редактировать ]

Последовательность RMQ, полученная из LCA, имеет одно свойство, которого нет у обычного RMQ. Следующий элемент всегда равен +1 или -1 от текущего элемента. Например:

Иллюстрация, показывающая, как пример RMQ кодируется как битовая строка.

Поэтому каждый блок может быть закодирован как битовая строка, где 0 представляет текущую глубину -1, а 1 представляет текущую глубину +1. Это преобразование превращает блок в битовую строку размера . Битовая строка размера имеет возможные битовые строки. С , так .

Следовательно, всегда является одним из возможная битовая строка размером .

Затем для каждой возможной битовой строки мы применяем наивное квадратичное решение с постоянной времени . Это займет пространства, что .

Поэтому, отвечая на запрос в случае 2 просто находит соответствующий блок (в котором находится битовая строка) и выполняет поиск в таблице для этой битовой строки. Следовательно, случай 2 можно решить, используя линейное пространство с постоянным временем поиска.

Расширение ориентированных ациклических графов

[ редактировать ]
DAG с наименьшими общими предками x и y, выделенными темно-зеленым цветом, а другие общие предки - светло-зелеными.

Первоначально изучавшееся в контексте деревьев, понятие наименьших общих предков может быть определено для направленных ациклических графов (DAG), используя любое из двух возможных определений. В обоих случаях предполагается, что края DAG направлены от родителей к детям.

В дереве самый низкий общий предок уникален; в DAG из n узлов каждая пара узлов может иметь до n -2 LCA ( Bender et al. 2005 ), в то время как существование LCA для пары узлов даже не гарантируется в произвольно подключенных DAG.

Алгоритм грубой силы для поиска наименьших общих предков предложен Айт-Качи и др. (1989) : найти всех предков x и y , затем вернуть максимальный элемент пересечения двух наборов. Существуют более совершенные алгоритмы, которые, аналогично алгоритмам LCA для деревьев, предварительно обрабатывают граф, чтобы обеспечить выполнение запросов LCA с постоянным временем. Проблема существования LCA может быть решена оптимально для разреженных DAG с помощью алгоритма O(| V || E |) , предложенного Ковалуком и Лингасом (2005) .

Даш и др. (2013) представляют единую структуру для предварительной обработки ориентированных ациклических графов для вычисления репрезентативного наименьшего общего предка в корневом DAG за постоянное время. Их структура может обеспечить почти линейное время предварительной обработки для разреженных графов и доступна для публичного использования. [1]

Приложения

[ редактировать ]

Проблема вычисления низших общих предков классов в иерархии наследования возникает при реализации систем объектно-ориентированного программирования ( Айт-Качи и др., 1989 ). Проблема LCA также находит применение в моделях сложных систем, используемых в распределенных вычислениях ( Bender et al. 2005 ).

См. также

[ редактировать ]
  1. ^ «Попробуйте наш исходный код бесплатно» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 7877e252e826f4dc40e6ac7003fe7492__1711521780
URL1:https://arc.ask3.ru/arc/aa/78/92/7877e252e826f4dc40e6ac7003fe7492.html
Заголовок, (Title) документа по адресу, URL1:
Lowest common ancestor - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)