Остовное дерево в планарном графе
| НЕТ ВОЙНЕ |
|
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян. Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием. Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей. Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить. Антивоенный комитет России |
| Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению. |
| meduza.io, Популярная политика, Новая газета, zona.media, Майкл Наки. |
В планарных графах возможно построить остовное дерево за , что заметно быстрее, чем алгоритмы, используемые для поиска остовного дерева в общем случае. Рассмотрим более общую задачу — построение остовного дерева минимального (максимального) веса в планарном графе, которая также может быть решена за .
Содержание
Остовное дерево минимального (максимального) веса в планарном графе
Пусть есть граф , где – множество вершин, – множество рёбер. Для произвольной вершины графа обозначим как множество рёбер графа , инцидентных . Для любого подмножества рёбер граф будем называть остовным лесом графа , когда граф ацикличен. Остовный лес является остовным деревом, когда он связен. Вес ребра обозначим как . Вес подмножества рёбер обозначим как , он является суммой весов рёбер, входящих в . Максимальный остовный лес называется остовным лесом минимального (максимального) веса, когда вес минимален (максимален). Для решения этой задачи, помимо исходного планарного графа , потребуется его двойственный граф , который можно легко построить геометрически по укладке на плоскости[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)
Источники информации
Sciencedirect — The minimum spanning tree problem on a planar graph