Графы: основы — вершины, рёбра, степени и способы задания
Что такое граф, как считать степени вершин и применять лемму о рукопожатиях, чем матрица смежности отличается от списка рёбер и что такое связность.
Схема метро, карта друзей в соцсети, схема дорог, дерево зависимостей пакетов — всё это одна математическая структура. Граф отбрасывает географию и геометрию, оставляя главное: какие объекты связаны между собой. Оказывается, такого скелета достаточно, чтобы решать задачи про маршруты, сети, расписания и даже химические соединения. Разберём словарь теории графов — на нём дальше держится весь блок курса; среди словарных статей и хроматическое число — минимум цветов раскраски, который вы попробуете руками ниже.
Что такое граф#
Граф — это пара , где — множество вершин, а — множество рёбер, то есть пар вершин. Вершины рисуют кружками, рёбра — линиями. Какие кружки где рисовать — вопрос вкуса: граф не несёт геометрии, важны только связи. Словарная статья граф повторяет эту конструкцию в двух абзацах, если понадобится краткий справочник.
Уточнения по видам. Если ребро — упорядоченная пара, граф ориентированный (стрелки от «откуда» к «куда»): так задают односторонние дороги и ссылки между страницами. Если у ребра есть число — вес (расстояние, цена, время), граф взвешенный. Пара вершин может соединяться несколькими рёбрами (мультиграф) или ребром из вершины в неё же (петля) — в базовых задачах их обычно запрещают. Отдельный важный вид — двудольный граф: вершины делятся на две доли, и каждое ребро соединяет вершины разных долей.
Две вершины смежны, если соединены ребром. Ребро и вершина инцидентны, если вершина — конец ребра. Пример: в графе с вершинами и рёбрами вершины и смежны, а и — нет; ребро инцидентно вершинам и .
Степень вершины и лемма о рукопожатиях#
Степень вершины — число рёбер, инцидентных вершине (петля считается дважды). Вершина степени 0 называется изолированной, степени 1 — висячей. В примере выше: , , .
Главное наблюдение вводной главы: если просуммировать степени всех вершин, каждое ребро посчитается дважды — у него же два конца. Отсюда лемма о рукопожатиях:
Название честное: на вечеринке каждый факт «два человека пожали руки» увеличивает «число рукопожатий» у двух людей сразу. Следствие — на зачёте любят спрашивать: граф с 5 вершинами, у каждой степень 3, имеет рёбер? Так не бывает! Сумма степеней обязана быть чётной, поэтому граф, у которого нечётное число нечётных вершин, не существует. Число вершин нечётной степени всегда чётно — прямое следствие леммы о рукопожатии.
Ещё одна классика — полный граф : все пары вершин соединены. Каждая из вершин связана с остальными, и каждое ребро посчитано дважды: . Для это рёбер. Кстати, это в точности из комбинаторики — выбрать пару вершин из .
Как задать граф для компьютера#
Картинка глазами не масштабируется, и в алгоритмах граф хранят тремя способами. Выбор зависит от того, что важнее: память или скорость ответов на вопросы «а смежны ли эти две?».
| Способ | Что это | Память | Проверка смежности |
|---|---|---|---|
| Матрица смежности | таблица , единица на пересечении смежных вершин | ||
| Список рёбер | перечень пар (и весов) | — нужен поиск | |
| Списки смежности | для каждой вершины — список её соседей | за степень вершины |
Матрица смежности — это по сути матрица из нулей и единиц: на пересечении строки и столбца стоит 1, если ребро есть. Для ориентированного графа единицы асимметричны, для взвешенного вместо единиц пишут веса. Матрица удобна для плотных графов и для быстрых алгебраических трюков, но для сети с миллионом вершин и миллионом рёбер таблица на ячеек — разорение, поэтому на практике чаще используют списки смежности.
| $A$ | $B$ | $C$ | $D$ | |
|---|---|---|---|---|
- Задача: в компании из 7 человек каждый дружит ровно с тремя. Возможно ли это?
- Считаем сумму степеней: . Число нечётное — а должно быть .
- Вывод: такой компании не существует, лемма о рукопожатиях запретила её за одну строку.
- Сравните: «каждый дружит ровно с четырьмя» даёт , рёбер — препятствий нет, и граф действительно строится.
Пути, циклы и связность#
Маршрут (путь) — чередующаяся последовательность вершин и рёбер , где каждое ребро соединяет соседние вершины последовательности. Длина пути — число рёбер. Путь называется простым, если вершины не повторяются. Цикл — замкнутый путь, у которого начало совпадает с концом (в простом цикле все вершины различны, кроме первой и последней).
Граф связный, если из любой вершины можно добраться до любой другой по рёбрам. Максимальные связные куски называются компонентами связности — у несвязного графа их несколько. Число компонент — простейшая «грубая сила» анализа: соцсеть, распавшаяся на две несвязанные группы, именно так и выглядит формально.
- Дерево — связный граф без циклов; в нём ровно ребро (см. урок о деревьях)
- Двудольный граф — вершины делятся на две доли, рёбра идут только между долями; критерий: нет циклов нечётной длины
- Изоморфные графы — одинаковы с точностью до переименования вершин; проверить изоморфизм на глаз бывает непросто
- Взвешенный граф — на каждом ребре число: километры, минуты, цена; вся навигация живёт именно на взвешенных графах
Быстрая эвристика для связности на контрольной: сумма степеней должна быть хотя бы — столько даёт дерево. Если у графа вершин и меньше рёбер, он заведомо несвязен. Работает в обе стороны только как необходимое условие: ребра может хватать, а связности — нет (два отдельных треугольника).
Закрепим словарь числами. Возьмите граф из примера выше: вершины , рёбра . Степени: , , , ; сумма равна удвоенному числу рёбер — лемма сходится. Компонента связности одна: из D через C добираемся до всех. Цикл есть ровно один — треугольник ABC; добавьте ребро AD, и циклов станет два, удалите CD — D превратится в изолированную вершину. Одна маленькая конфигурация прогоняет через себя весь словарь урока.
У графа 6 вершин, степени всех вершин равны 3. Сколько у него рёбер?
Может ли существовать граф с 4 вершинами и степенями 3, 3, 1, 1?
Частые вопросы
Чем граф отличается от дерева?
Дерево — частный случай графа: связный и без циклов. В дереве между любыми двумя вершинами ровно один простой путь, и рёбер ровно . Обычный граф может иметь циклы и несколько маршрутов между вершинами.
Обязательно ли рисовать граф без пересечений рёбер?
Нет: геометрия рисунка ничего не значит. Граф называется планарным, если его можно перерисовать без пересечений, но это отдельное свойство (теорема Понтрягина-Куратовского), а не требование. Даже — граф с 5 вершинами и 10 рёбрами — планарным не является, хотя как граф существует.
Как посчитать число компонент связности?
Запустите обход (BFS или DFS) из непосещённой вершины — он покрасит всю компоненту. Повторяйте, пока есть непосещённые вершины: число запусков и есть число компонент. Это стандартное упражнение на первом семинаре по графам.
Зачем графу веса, если они не рисуются на схеме?
Вес — число на ребре: километры, минуты, цена прокладки кабеля, пропускная способность. На рисунке веса пишут подписями у рёбер. Весь блок алгоритмов — минимальные остовные деревья, кратчайшие пути — работает именно со взвешенными графами.
Готовитесь к контрольной?
Чеклист тем по «Дискретка»: что вы уже умеете, что повторить и в каком порядке.
Открыть чеклист предмета →
Проверьте себя в бою
Босс-экзамен по «Дискретка»: квизы всех уроков плюс бесконечный поток сгенерированных задач. Каждая попытка — новый расклад.
Начать босс-экзамен →