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

В этом дереве самый низкий общий предок узлов Икс и у отмечен темно-зеленым. Остальные общие предки показаны светло-зеленым цветом.

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

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

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

История

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

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

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

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

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

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

DAG с общими предками Икс и у светло-зеленым, а их самые низкие общие предки - темно-зеленым.

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

  • Данный грамм = (V, E), Aït-Kaci et al. (1989) определить посеть (V, ≤) такой, что Иксу если только Икс доступен из у. Самые низкие общие предки Икс и у тогда являются минимальными элементами под ≤ ≤ множества общих предков {zV | Иксz и уz}.
  • Бендер и др. (2005) дали эквивалентное определение, где самые низкие общие предки Икс и у узлы высшая степень ноль в подграф из грамм индуцированный множеством общих предков Икс и у.

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

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

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

Приложения

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

Смотрите также

Рекомендации

  1. ^ «Попробуйте наш исходный код бесплатно».

внешняя ссылка