DSatur

Алгоритм раскраски графов Даниэля Брелаза
DSatur
СортРаскраска графа
Наихудшая сложность пространстваΟ ( н 2 )

DSatur — это алгоритм раскраски графов , предложенный Даниэлем Брелазом в 1979 году. [ 1] Подобно алгоритму жадной раскраски , DSatur раскрашивает вершины графа одну за другой, добавляя ранее неиспользованный цвет при необходимости. После того, как новая вершина раскрашена, алгоритм определяет, какая из оставшихся неокрашенных вершин имеет наибольшее количество цветов в своем окружении, и раскрашивает эту вершину следующей. Брелаз определяет это число как степень насыщенности данной вершины. [1] Сокращение термина «степень насыщенности» образует название алгоритма. [2] DSatur — это эвристический алгоритм раскраски графов, но при этом выдает точные результаты для двудольных, [1] циклических и колесных графов. [2] DSatur также упоминается в литературе как насыщенный LF. [3]

Псевдокод

Пусть «степень насыщенности» вершины будет числом различных цветов, используемых ее соседями. Учитывая простой неориентированный граф , скомпрометировавший множество вершин и множество ребер , алгоритм назначает цвета всем вершинам с помощью цветовых меток . Алгоритм работает следующим образом: [4] Г {\displaystyle G} В {\displaystyle V} Э {\displaystyle E} 1 , 2 , 3 , . . . {\displaystyle 1,2,3,...}

  1. Пусть будет неокрашенной вершиной в с наибольшей степенью насыщения. В случае связей выбираем вершину среди них с наибольшей степенью в подграфе, индуцированном неокрашенными вершинами. в {\displaystyle v} Г {\displaystyle G}
  2. Назначить наименьшую цветовую метку, не используемую ни одним из соседей. в {\displaystyle v}
  3. Если все вершины были окрашены, то конец; в противном случае вернуться к шагу 1.

Шаг 2 этого алгоритма назначает цвета вершинам, используя ту же схему, что и алгоритм жадной раскраски . Основные различия между двумя подходами возникают на шаге 1 выше, где вершины, которые кажутся наиболее «ограниченными», окрашиваются первыми.

Пример

Граф-колесо с семью вершинами и двенадцатью ребрами

Рассмотрим граф, показанный справа. Это граф-колесо , и поэтому он будет оптимально раскрашен алгоритмом DSatur. Выполнение алгоритма приводит к выбору и раскрашиванию вершин следующим образом. (В этом примере, где возникают связи в обеих эвристиках DSatur, выбирается вершина с наименьшей лексикографической маркировкой среди них.) Г = ( В , Э ) {\displaystyle G=(V,E)}

  1. Вершина (цвет 1) г {\displaystyle г}
  2. Вершина (цвет 2) а {\displaystyle а}
  3. Вершина (цвет 3) б {\displaystyle б}
  4. Вершина (цвет 2) с {\displaystyle с}
  5. Вершина (цвет 3) г {\displaystyle д}
  6. Вершина (цвет 2) е {\displaystyle е}
  7. Вершина (цвет 3) ф {\displaystyle f}

Это дает окончательное трехцветное решение . С = { { г } , { а , с , е } , { б , г , ф } } {\displaystyle {\mathcal {S}}=\{\{g\},\{a,c,e\},\{b,d,f\}\}}

Производительность

Худшая сложность DSatur составляет , где — количество вершин в графе. Это связано с тем, что процесс выбора следующей вершины для окраски занимает время, и этот процесс выполняется раз. Алгоритм также может быть реализован с использованием двоичной кучи для хранения степеней насыщенности, работающей в , или с использованием кучи Фибоначчи, где — количество ребер в графе. [2] Это обеспечивает гораздо более быстрые прогоны с разреженными графами. О ( н 2 ) {\displaystyle O(n^{2})} н {\displaystyle n} О ( н ) {\displaystyle O(n)} н {\displaystyle n} О ( ( н + м ) бревно н ) {\displaystyle O((n+m)\log n)} О ( м + н бревно н ) {\displaystyle O(m+n\log n)} м {\displaystyle м}

Известно, что DSatur точен для двудольных графов [1] , а также для циклических и колесных графов. [2] В эмпирическом сравнении, проведенном Льюисом в 2021 году, DSatur дал значительно лучшие раскраски вершин, чем жадный алгоритм на случайных графах с вероятностью ребра , в то же время давая значительно худшие раскраски, чем рекурсивный алгоритм наибольшего первого элемента . [2] п = 0,5 {\displaystyle p=0.5}

Ссылки

  1. ^ abcd Брелаз, Даниэль (1979-04-01). "Новые методы раскрашивания вершин графа". Сообщения ACM . 22 (4): 251–256. doi : 10.1145/359094.359101 . ISSN  0001-0782. S2CID  14838769.
  2. ^ abcde Льюис, RMR (2021). Руководство по раскраске графов: алгоритмы и приложения . Тексты по информатике (2-е изд.). Берлин: Springer. doi :10.1007/978-3-030-81054-2. ISBN 978-3-030-81053-5. S2CID  57188465.
  3. ^ Kubale, ed. (2004). Graph Colorings (т. 352) . Providence: American Mathematical Society. стр. 13. ISBN 978-0-8218-3458-9.
  4. ^ Льюис, Райд (2019-01-19). "Конструктивные алгоритмы раскраски графов". youtube.com . Событие происходит в 3:49.
  • Высокопроизводительные алгоритмы раскраски графов Набор алгоритмов раскраски графов (реализованных на языке C++), использованных в книге «Руководство по раскраске графов: алгоритмы и приложения» (Springer International Publishers, 2021).
  • Реализация алгоритма DSatur на языке C++, представленная в статье «Алгоритм DSatur для раскраски графов», Geeks for Geeks (2021)
Взято с "https://en.wikipedia.org/w/index.php?title=DSatur&oldid=1250833441"