Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Теория графов Комбинаторика

eyJpZCI6ImRjOGUxNjQ3ZDk0MzRiY2IyOTQ3YjQyNzZhNWVmMTJjLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=4e79ccb929d82ab1ed3f673ec9aad1636c43119d37b89dbb97073c1fee4b5a05

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

Как углубить знания в комбинаторике

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

В математике обычно говорят о «существовании». Сущность существует, если математический пример удовлетворяет абстрактным свойствам, определяющим сущность. Неочевидно, что существует даже единственная конфигурация с определенными заданными свойствами. Такая ситуация порождает проблемы существования и конструирования. Эти абстрактные формулировки используются и в комбинаторных задачах, и в этом состоит вторая сложность.

Считается, что комбинаторика нужна только для счета, но на деле она шире. Она решает и неожиданные вопросы, например, «Возможна ли определенная комбинация?». Но чтобы отвечать на такие вопросы с помощью комбинаторики, нужно добавить в нее конкретики. В этом помогает теория графов.

Что такое теория графов

Теория графов занимается графами — различными типами сетей или моделями сетей. Сами графы выглядят как точки, соединенные линиями:

eyJpZCI6IjZhMWE2MjUzNTlhOGFmMWY0NWJmMWJlMDE0ZjgwMTcyLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=e407c96ac879e9800a9bd0b1f5c617e87a9deb771c1144aef1cb4b1fbeffadf7

Вместо точек и линий в теории графов используются другие термины — вершины и ребра. Рассмотрим несколько примеров графов, чтобы лучше понять, о чем речь.

Задача с домино и шахматной доской

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

  • Доска покрыта, если костяшки уложены так, что каждая из них покрывает ровно два квадрата доски

  • Ни одна костяшка не пересекается с другой

  • Каждая клетка доски в итоге покрыта

Ответ на эту задачу прост: чтобы покрыть доску, надо выложить 32 костяшки в ряд. Чтобы сделать задачу более интересной, добавим два новых условия:

  • Доска может быть прямоугольником любого размера

  • Можно убрать с доски некоторые квадраты

Доска может быть примерно такой:

eyJpZCI6ImJmNDVmZmI2N2NhMTk3MmI1NjRiMjI4MjE5YWU3YzNkLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=d13b241cf6809a9c270aeb2bd1e3605ea69bd9cdce37b80e5003e734f05933c5

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

eyJpZCI6IjI3M2YwNzc2NjNkMTE5ZDBiNTc4ZjhmZTI0NDczYWZiLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=1de20cb850120bf8655281e90399f9e14edec2bf82955411d3ced34ef80b4bfe

Теперь мы узнали кое-что новое — у нас есть четыре белых и шесть серых плиток. Каждая плитка должна покрывать один белый и один серый квадрат, но это невозможно. Теперь у нас есть полная картина? Снова неочевидно:

eyJpZCI6IjFmZjdmNjNiYmRiMTE4NjliZWNkYmI2YThmYzE0NDVmLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=40d844aa68ac07ddf6febd69aa4b59c9f73a50d92a5a98c5f20c00bacecf3480

Серый квадрат в правом верхнем углу явно не может быть покрыт, потому что у него нет пары.

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

eyJpZCI6ImZiNmI2ZjI3N2FlZWMxNzg1ODViZGNhYmRkOGIxOTJkLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=e8bbec5b7a7e85f38536859e88c46fd2a4083ab67cea63f668c12e86fd01f70d

Расшифруем, что здесь обозначено:

  • Верхний ряд вершин — серые квадраты

  • Нижний ряд вершин — белые квадраты

  • Ребра — костяшки домино

Теперь мы можем размышлять так: «Костяшки соответствует набору ребер, которые не имеют общих конечных точек и касаются всех шести вершин. Ни одно ребро не касается левой верхней вершины, поэтому эта клетка на шахматной доске не закроется».

Задача с раскраской

Возможно, самая известная задача в теории графов связана с раскраской карт. Она сформулирована так: «Если дана карта некоторых стран, то сколько цветов необходимо, чтобы раскрасить карту так, чтобы страны с общей границей имели разные цвета? Долгое время предполагалось, что любую карту можно раскрасить четырьмя цветами, и это было окончательно доказано в только 1976 году. Вот пример небольшой карты, раскрашенной четырьмя цветами:

eyJpZCI6ImY3ZDZlYjE3NGJmZTQ3ZDc2YTZiMjY3MTE3MTM5ODI0LnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=c5671811976ac7a43f97cbc2c7fb8926e833f27739e4b52eba5c037fce1ceb83

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

eyJpZCI6IjBhY2VhODY2OTJmNjA1NjYyYzcwZGMxNGEyMTlhNzVhLnBuZyIsInN0b3JhZ2UiOiJjYWNoZSJ9?signature=ef33e67e3649562609b750808e4e67b8e65d7b92e406eb17723e0801b666b3ed

Выводы

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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