Остовное дерево в планарном графе
В планарных графах возможно построить остовное дерево за , что заметно быстрее, чем алгоритмы, используемые для поиска остовного дерева в общем случае. Рассмотрим более общую задачу — построение остовного дерева минимального (максимального) веса в планарном графе, которая также может быть решена за .
Остовное дерево минимального (максимального) веса в планарном графе
Пусть есть граф двойственный граф , который можно легко построить геометрически по укладке на плоскости[1].
, где – множество вершин, – множество рёбер. Для произвольной вершины графа обозначим как множество рёбер графа , инцидентных . Для любого подмножества рёбер граф будем называть остовным лесом графа , когда граф ацикличен. Остовный лес является остовным деревом, когда он связен. Вес ребра обозначим как . Вес подмножества рёбер обозначим как , он является суммой весов рёбер, входящих в . Максимальный остовный лес называется остовным лесом минимального (максимального) веса, когда вес минимален (максимален). Для решения этой задачи, помимо исходного планарного графа , потребуется егоЕсли данный граф связен, задача эквивалентна обычной задаче поиска минимального (максимального) по весу остовного дерева. Известно, что подмножество рёбер
– максимальный остовный лес тогда и только тогда, когда – максимальный остовный лес . Таким образом, задача поиска минимального по весу остовного леса графа – по сути то же самое, что задача поиска максимального по весу остовного леса .Формальное описание алгоритма
Итак, имеется планарный граф
, его двойственный граф и веса рёбер , на выходе нужно получить остовный лес минимального веса графа и остовный лес максимального веса графа .Шаг 0: Запись графов.
; .Шаг 1: Если графы
и пусты одновременно, выведем и .Шаг 2: Выберем вершину
в графе или :Если
– изолированная вершина, удалим её и вернёмся к шагу 1;Если
– вершина и в есть петля, перейдём к шагу 3;Если v – вершина
и в нет петель, перейдём к шагу 4;Если
– вершина и в есть петля, перейдём к шагу 5;Если
– вершина и в нет петель, перейдём к шагу 6;Шаг 3: Пусть
– петля , инцидентная .; ; .
Вернёмся к шагу 1.
Шаг 4: Найдём ребро
, достигающее минимального веса среди рёбер из .; ; . ( обозначает операцию стягивания ребра)
Вернёмся к шагу 1.
Шаг 5: Пусть
– петля , инцидентная .; ; .
Вернёмся к шагу 1.
Шаг 6: Найдём ребро
, достигающее максимального веса среди рёбер из .; ; .
Вернёмся к шагу 1.
Корректность и время работы
Легко убедиться в том, что на протяжении всех итераций приведённого алгоритма
является двойственным графом графа , из чего следует корректность этого алгоритма.На каждой итерации алгоритма происходит удаление ребра или вершины, из этого следует, что количество итераций алгоритма не превосходит
.Далее опишем, как добиться того, чтобы каждая итерация осуществлялась за
. Для каждой вершины графа обозначим степень этой вершины (петли считаются дважды). Из формулы Эйлера следует, что в или , где – планарный граф, а - двойственный к нему, существует вершина, степень которой меньше четырёх.На шаге 2 будем выбирать именно такую вершину. Сначала покажем, что каждая интеграция алгоритма выполняется за
, предполагая, что нужная вершина на шаге 2 всегда выбирается за константное время, реализацию обсудим позже.Итак, оба графа хранятся в виде списков смежности. Тогда, очевидно, шаги 1 и 2 выполняются за
. Поскольку при такой реализации рёбра удаляются за константное время, шаги 3 и 5 выполняются за . Рассмотрим шаг 4. Поскольку степень вершины не больше четырёх, поиск ребра минимального веса займёт константное время. Стягивание ребра происходит за . Для шага 6 рассуждения аналогичны.Вернёмся к выбору вершины на шаге 2. Для этого создадим хэш-таблицу, содержащую все вершины степени меньше четырёх. Это позволяет выбрать нужную вершину за
, но хэш-таблицу также нужно обновлять. При удалении ребра из графа степени вершин, инцидентных ему, уменьшаются на 1 (или на 2 в случае петли), степени же остальных вершин не меняются. Теперь рассмотрим случай стягивания ребра. Удаляются концы стягиваемого ребра, а получающаяся в результате этого вершина должна быть добавлена в хэш-таблицу, если её степень меньше четырёх. Таким образом, на каждой итерации алгоритма из хэш-таблицы может быть удалено максимум две вершины, а добавлено - максимум четыре, значит, хэш-таблица обновляется за константное время. Создание хэш-таблицы должно происходить вместе с шагом 0 и осуществляется за .Примечания
- ↑ E.L. Lawler, Combinatorial Optimization: Networks and Matroids (Holt, Rinehart and Winston, New York, 1976)