Зарегистрируйтесь, чтобы продолжить обучение

Раскрашивание графа Теория графов

В этом уроке мы разберем, что такое раскраска графов и как это относится к цифрам на вершинах. Также покажем примеры раскраски графов разных типов, так как в каждом случае этот процесс немного отличается.

Раскраска графов

Когда мы присваиваем вершинам графа метки — это называется раскраской графов.

Цвета — это целые положительные цифры. Графы нужно раскрашивать так, чтобы соседние вершины имели разные цвета. Еще стоит использовать как можно меньше цветов.

Вот несколько примеров раскраски графа:

eyJpZCI6IjI2NzBlZWJlOTI0OGY0MGFjZGNhZGRlNGE3MGUxZTM5LnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=05cb707cd11010d75dfa8911a7884c1b2b97916129f2fa2c5417a77a30e78fa4

Первый пример на схеме выше не совсем верный, потому что соседним вершинам присваивается один и тот же цвет. Вторая раскраска лучше, так как удовлетворяет правилам, но в ней используется больше цветов, чем нужно. Третья раскраска — правильная. Она удовлетворяет правилам и использует как можно меньше цветов.

В этих графах невозможно использовать меньше трех цветов, так как треугольники содержат три вершины, которые являются соседями.

Хроматическое число графа , которое обозначается — это минимальное количество цветов, необходимое для правильной раскраски графа.

Чтобы обозначить, о каком графе идет речь, мы будем сокращенно обозначать как . Рассмотрим раскраску графов на просто классе графов — путях.

Раскраска путей

Вот несколько оптимальных вариантов раскраски путей:

eyJpZCI6Ijc4ZDk3ZWJkMmQ2Y2NhNGFkOTQyMmQ0ODQ0ZjhhZDMyLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=a0a786ed728f8cb739eb06b2b35c9223d3961c5556402cc7deb2f3aa2382f14f

В общем случае для каждого .

Рассмотрим другие примеры:

eyJpZCI6ImZiMTEwOTUwNzU0NDVhYjMyNGIwYmJkMDE3ZTA4NzA2LnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=a6a6eda409087d3b29f0552fea17977c3ddc145bf5fc592c69d792a7d2c2b1c9

Четные и нечетные циклы ведут себя по-разному. У нечетных всегда хроматическое число три, а у четных — хроматическое число два.

Теперь рассмотрим, как раскрашивают полные графы.

Раскраска полных графов

У нас есть следующие полные графы с уже помеченными вершинами:

eyJpZCI6ImVkYjczZDFiNTNiZWMzM2ZmM2VkMmJkYmQ3ZDE0OTY1LnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=c12a76dab7f730186da399028d1510ea4f7b5238e91badbb4f2adc61f0d3fecf

Поскольку в полном графе каждая вершина смежна с любой другой вершиной, мы не можем повторить ни одного цвета. Таким образом, .

Раскраска двудольных графов

Рассмотрим следующие примеры:

eyJpZCI6IjkxMWVjOTBhOTUxMWNmOGU3MGZhYTBjOGZlNjUwNjhjLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=ca5452b2b7936fa41fa5789d2e15f09112ad134db787afe121b9e6950ed96792

На графиках видно, что соседние вершины раскрашены в один цвет. В случае с двудольными графами такое возможно, так как применяется правило партитного множества — независимое множество, между вершинами которого нет ребер. Поэтому мы можем окрасить все его вершины в один цвет.

Для двух партитных множеств нужно два цвета. И это относится к любому двудольному графу, а не только к полному.

Любой граф с хотя бы одним ребром является двудольным, когда он двухцветный. Поскольку деревья двудольные, мы теперь знаем, что все нетривиальные деревья имеют хроматическое число .

Объединения и стыковки

Мы пришли к такой формуле:

Это связано с тем, что между копиями и в объединении нет ребер. Поэтому мы можем раскрасить каждый граф отдельно, и не беспокоиться:

eyJpZCI6IjdiZDg5ZDhmMzlkNDczMDVkZGI5MGQ1ZmExMDA4MTUyLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=e562cfe45281d894d254a491c178f03f4f8282311f91bbf591d7136f09d93695

Мы также имеем — каждая вершина смежна с каждой вершиной . Поэтому ни один цвет, который используется на , не может быть использован на и наоборот.

Обратите внимание на второй граф на схеме выше. Чтобы получить правильную раскраску , мы можем раскрасить и отдельно, а затем заменить каждый цвет из на .

Декартово произведение

Декартово произведение немного сложнее. Результат , что совпадает с результатом для объединения.

Рассмотрим пример: . Ниже выделена конкретная вершина:

eyJpZCI6IjFkOTI3NzU5YzhjMzkyMWM5YjEyZGQzNjgzNDNiZTZhLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=686358d4329c19fae3af3f6dc38c39b521bfa25c04be75449ca5a7a2c13b4c9a

Выделенная вершина — это часть сразу двух графов ( и ). Нам нужно убедиться, что ее раскраска работает в отношении обоих графов. Мы можем представить и как состоящий из пяти копий со связями между копиями, которые определяются связями .

Нам нужно раскрасить каждую из пяти копий по-своему и убедиться, что взаимодействия между копиями, которые определяются , соблюдены. Начнем с оптимальных раскрасок и :

eyJpZCI6ImQ1OGU3YzZmMDEzNGZkZDg3OTE0ZDNkMGQ3MDA4MjlkLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=1367da2bbc6df15321b9c24a16b57b639a51d47b1fb7d48a63769389aa8200a2

Хитрость в том, чтобы для каждой вершины взять ее цвет в , ее цвет в и сложить их. При этом нужно уменьшить результат по модулю и заменить все полученные нули тройками. В итоге раскраски для пяти копий выглядят следующим образом:

eyJpZCI6ImNhMzQwN2NlNDhiZWU3YjhmMTc4MmJlMWNjNWRiOTk2LnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=fc51ff367d9df5859804397138a34b11e0703a4c79797fc96866b09d9a7e9d7a

Такой способ гарантирует, что соседние вершины никогда не будут иметь одинаковый цвет. Этот же процесс работает и в общем случае:

  • Для графов и пусть будет

  • Раскрасим вершину из цветом

  • Уточним, что в выражении выше и — это цвета в и соответственно

Произвольный граф

Вот еще один пример раскраски графа без очевидной структуры:

eyJpZCI6IjE4MTQ2NmNiMTAwMDllNWM3OWEzZGE2OTBmMDc0ZWZjLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=e22a10981747e024e6161f395397b9ce5d9aca3894ab49e02bb29cbae339ee36

Может потребоваться некоторое усилие, чтобы придумать ответ к такой неочевидной структуре. Пройдем этот процес по шагам:

  • На графе много треугольников, поэтому нам нужно использовать как минимум три цвета

  • На графе справа выделен -цикл, для него требуется цвета

  • Вершина в середине цикла смежна со всем циклом, поэтому мы не можем повторно использовать ни один из цветов цикла

  • Таким образом, требуется цвета

Выводы

В этом уроке мы разобрали, что такое раскраска графов и как это относится к цифрам на вершинах. Мы показали, как раскрашивать графы разных типов. В каждом случае этот процесс немного отличается, при этом везде соблюдается правило соседних вершин.


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу