courses:algorithms_building_and_analysis:materials:graph_coloring_notes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

courses:algorithms_building_and_analysis:materials:graph_coloring_notes [2020/06/27 14:13]
aoblizanov [[В работе] Конспект лекции по раскраскам]
courses:algorithms_building_and_analysis:materials:graph_coloring_notes [2022/12/10 09:08]
Line 1: Line 1:
-====== [В работе] Конспект лекции по раскраскам ====== 
-Раскраска графа 
- 
-  * [[#​раскраска-графа|Раскраска графа]] 
-    * [[#​алгоритм-полного-перебора-совсем-наивный-перебор|Алгоритм полного перебора (совсем наивный перебор)]] 
-    * [[#​перебор-с-учётом-выбора-только-из-2-цветов|Перебор с учётом выбора только из 2 цветов]] 
-    * [[#​перебор-подмножеств-размера-math-xmlnshttpwwww3org1998mathmathmlsemanticsmrowmomomfracminmimn3mnmfracmrowannotation-encodingapplicationx-texleftarrow-fracn3annotationsemanticsmath3n|Перебор подмножеств размера $\Leftarrow \frac{n}{3}$]] 
-    * [[#​вероятностный-алгоритм-two-list-coloring-сведение-к-задаче-выполнимости|Вероятностный алгоритм (Two-List Coloring). Сведение к задаче выполнимости.]] 
-    * [[#​алгоритм-перебора-по-инцидентным-вершинам|Алгоритм перебора по инцидентным вершинам]] 
-    * [[#​применение|Применение]] 
- 
-====== Раскраска графа ====== 
- 
-Когда говорят о раскраске графов,​ почти всегда подразумевают под этим раскраску их вершин,​ то есть присвоение цветовых меток вершинам графа так, чтобы любые две вершины,​ имеющие общее ребро, имели разные цвета. Так как графы, в которых есть петли, не могут быть раскрашены таким образом,​ они не являются предметом обсуждения. 
- 
-**Хроматическое число графа** - минимальное количество цветов покрасок. 
- 
-Соседей вершины нельзя красить в тот же цвет. 
- 
-**Полный граф** - такой граф, у которого есть путь из каждой вершины в каждую. Очевидно,​ что хроматическое число полного графа совпадает с количеством вершин. 
- 
-===== Алгоритм полного перебора (совсем наивный перебор) ===== 
- 
-Пусть дан граф и дана его раскраска. Чтобы проверить её корректность,​ нужно обойти все ребра и проверить,​ если одинаковые цвета на концах. Значит,​ сложность проверки - линейная. 
- 
-Самый простой вариант - генерация всех возможных три-раскрасок и проверка каждой на корректность. Сложность такого алгоритма - $O(3^n)$, т.к. это число возможных три-раскрасок графа. 
- 
-Степенную сложность степени не убрать никак, на данный момент самый эффективный алгоритм - $O(1.232^n)$. 
- 
-===== Перебор с учётом выбора только из 2 цветов ===== 
- 
-Пусть есть некоторая вершина. Мы красим её в первый цвет. Для инцидентных вершин выбор идет не из 3-х цветов,​ а из 2-х. Сложность такого алгоритма - $O(2^n)$. 
- 
-Другими словами,​ используется знание,​ что инцидентные данной вершины нельзя красить в цвет данной. 
- 
-===== Перебор подмножеств размера $\Leftarrow \frac{n}{3}$ ===== 
- 
-Два соображения:​ 
- 
-  * Если граф уже раскрашен,​ то вершины разделяются на множества - первого,​ второго и третьего цвета. Очевидно,​ что внутри этих множеств не существует ребер. Если есть $n$ вершин и 3 множества,​ очевидно,​ что одно из этих множеств будет иметь мощность $\le \frac{n}{3}$ вершин. ​ 
-  * Пусть нам заранее известно одно из этих множеств. Если это так, то все оставшиеся вершины будут красится гораздо проще - с линейной сложностью. ​ 
- 
-Значит,​ нужно найти такое множество. Способов выбрать такое множество:​ 
- 
-$$ Cn^0 + Cn^1 + C_n^2 + \dots + C{n}^{\frac{n}{3}} \le n \cdot C{n}^{\frac{n}{3}} \le 1.9^n $$ 
- 
-- радиус шара Хэмминга. 
- 
-Значит,​ сложность алгоритма - $O(1.9^n)$. 
- 
-===== Вероятностный алгоритм (Two-List Coloring). Сведение к задаче выполнимости. ===== 
- 
-Посмотрим все цвета для вершин,​ в которые можно их покрасить. Можно для каждой вершины случайным образом выкинуть один цвет и красить из оставшихся. В таком случае каждая вершина может быть покрасить в один из двух цветов. 
- 
-Такую задачу можно свести к **задаче выполнимости булевых формул (2SAT)**. 
- 
-Сведение такое: 
- 
-Пусть каждый цвет обозначается переменной $a1, a2, a_3$. Нужно покрасить все вершины в какие-то цвета. Это значит,​ что нужно выбрать хотя бы (и только) один из этих цветов. Т.е. для одной вершины верно следующее 
- 
-$$ ( a1 \lor a2 \lor a3 ) \land ( \bar a1 \lor \bar a2 ) \land ( \bar a1 \lor \bar a3 ) \lor (\bar a2 \lor \bar a_3) $$ 
- 
-1-й дизъюнкт - вершину нужно покрасить. 
- 
-2, 3, 4-е - вершину можно покрасить только в один цвет. 
- 
-Ещё нужно учесть ограничение три-раскраски,​ т.е. добавить ограничение на неодинаковость цвета инцидентных вершин. 
- 
-$$ \land ( \bar a1 \lor \bar b1 ) \land ( \bar a2 \lor \bar b2 ) \land ( \bar a3 \lor \bar b3 ) $$ 
- 
-Вычеркнув неиспользуемые цвета получаем задачу 2SAT, где каждый дизъюнкт содержит не больше чем два литерала. Эту задачу можно решить за полиномиальное время. 
- 
-Задачу 2SAT возможно свести к графу, и решением будет поиск компонент связности. 
- 
-Если найдено решение задачи,​ то граф точно может быть раскрашен,​ но обратное неверно - возможно,​ мы вычеркнули нужные цвета для раскраски. Вероятность того, что раскраска выживет после вычеркивания - $\left( \frac{2}{3} \right)^n$. Это очень мало. 
- 
-Но если прогнать алгоритм $\left( \frac{3}{2} \right)^n$ раз, то вероятность ошибки - $\frac{1}{e}$. 
- 
-Если после этого прогнать ещё 100 раз, то вероятность ошибки - $\frac{1}{e^{100}}$. 
- 
-Сложность алгоритма - $O(1.5^n)$. 
- 
-===== Алгоритм перебора по инцидентным вершинам ===== 
- 
-Мы можем перебирать множества инцидентных вершин достаточно эффективно:​ если одна вершина попала в первое множество,​ то инцидентные гарантированно туда не попадут. Алгоритм,​ основанный на этой идее, даёт сложность $O(1.45^n)$. 
- 
-===== Применение ===== 
- 
-  * Задача планирования. Пусть есть список заказов,​ которые начинаются и заканчиваются в определенное время. Нужно понять,​ какое минимальное количество ресурсов нужно выделить для решения этих заказов. Сводится так: пересечение заказов по времени - ребро графа. Хроматическое число графа и есть ответ. ​ 
-  * Есть карта - отображение информации,​ которое предполагает,​ что между объектами есть границы (например - политическая карта мира). Задача - определить минимальное число цветов раскрасить карту, чтобы были видны границы между объектами. Задача очевидным образов сводится к раскраске графа. ​ 
-  * Задача оптимального распределения переменных по регистрам. 
  
courses/algorithms_building_and_analysis/materials/graph_coloring_notes.txt · Last modified: 2022/12/10 09:08 (external edit)