Хроматическое число
англ. Chromatic number
Минимальное число цветов, в которое можно раскрасить вершины графа так, чтобы каждое ребро соединяло вершины разных цветов: два у двудольных графов, n у полного.
Хроматическое число графа — минимальное количество цветов, достаточное для раскраски его вершин так, чтобы любые две смежные (соединённые ребром) вершины получили разные цвета. Обозначение — . Если рёбра графа соединяют «конфликтующие» объекты, раскраска отвечает на вопрос: сколько типов нужно, чтобы развести все конфликты? Определение выглядит безобидно, но точное вычисление для произвольного графа — задача NP-полная: для больших графов работают оценки, достаточные условия и приближённые алгоритмы.
Интуиция — раскраска карты: страны граничат, и соседей хочется красить по-разному; вопрос «сколько красок хватит любой карте» — знаменитая проблема четырёх красок, ответ на которую (для плоских графов всегда достаточно четырёх) потребовал компьютерного перебора. Та же математика прячется в расписаниях (пар одного преподавателя не пересекаются — «рёбра» конфликтов), распределении частот между вышками связи и распределении регистров в компиляторах.
Эталонные значения полезно помнить: полный граф — (все смежны со всеми), пустой граф — 1, двудольный граф и любое дерево — 2, цикл чётной длины — 2, цикл нечётной длины — 3. Двудольность — самый приятный случай: она проверяется за линейное время обходом в ширину, который красит слои попеременно; если ребро соединило вершины одного слоя — найден нечётный цикл, и двух цветов мало.
Мини-пример: цикл из пяти вершин . Две краски идут по кругу через одну — но на нечётном цикле пятая вершина упирается в первую того же цвета, и нужен третий: . Добавьте хорду между несоседними вершинами — может понадобиться четвёртый. Отсюда рабочий алгоритм экзаменационных задач: найти клику (нижняя граница), попробовать раскрасить граф в столько же цветов, не получилось — поднять счётчик и повторить.
Каркас теории — урок основы графов, определение графа — в глоссарии; почему у деревьев два цвета — в уроке деревья и алгоритмы. Все формулы и обходы на одной странице — шпаргалка по графам.
Частые вопросы
Как быстро проверить, что хроматическое число равно двум?
Проверить двудольность: граф двухцветен тогда и только тогда, когда в нём нет нечётных циклов. Практически — обход в ширину красит слои в два цвета попеременно; если ребро соединило вершины одного слоя, найден нечётный цикл, и двух цветов не хватает.
Всегда ли жадная раскраска даёт хроматическое число?
Нет: она даёт верхнюю оценку, качество которой зависит от порядка вершин. При неудачном порядке алгоритм тратит много цветов даже на двудольный граф. Но если жадный алгоритм израсходовал ровно столько цветов, каков размер наибольшей клики, — улучшить результат нельзя: нижняя граница достигнута, это и есть .