Вы находитесь на странице: 1из 46

Основы алгоритмизации

Лекция № 5
Алгоритмы на графах
Что такое граф
В математике
определение графа
Рёбра графа
дается так:
Графом называется
конечное множество
точек, некоторые из
которых соединены
линиями.
Вершина графа
Точки называются
вершинами графа,
а соединяющие
линии – рёбрами.
Схема метро Харьков – это граф
ПОИСК КРАТЧАЙШЕГО ПУТИ

Сеть европейских железных дорог


Использование в прикладных задачах

• Географические карты и маршруты


• Расписания (scheduling)
• Web (гипертекст)
• Сети (networks) и т.д.
История возникновения графов
Термин "граф" впервые появился в книге
венгерского математика Д. Кенига в 1936
г., хотя начальные важнейшие теоремы о
графах восходят к Л. Эйлеру.
История возникновения графов
Основы теории графов
как математической науки
заложил в 1736 г.
Леонард Эйлер,
рассматривая задачу о
кенигсбергских мостах.
Сегодня эта задача стала
классической.
Задача о Кенигсбергских мостах
Бывший Кенигсберг (ныне Калининград)
расположен на реке Прегель. В пределах
города река омывает два острова. С берегов на
острова были перекинуты мосты. Старые мосты
не сохранились, но осталась карта города, где
они изображены.
Задача о Кенигсбергских мостах
Кенигсбергцы предлагали приезжим
следующую задачу: пройти по всем
мостам и вернуться в начальный пункт,
причём на каждом мосту следовало
побывать только один раз.
Я здесь
уже был!
Задача о Кенигсбергских мостах
Пройти по Кенигсбергским мостам, соблюдая
заданные условия, нельзя. Прохождение по
всем мостам при условии, что нужно на
каждом побывать один раз и вернуться в
точку начала путешествия, на языке теории
графов выглядит как задача изображения
«одним росчерком» графа.
Задача о Кенигсбергских мостах
Но, поскольку граф на этом рисунке имеет
четыре нечетные вершины, то такой граф
начертить «одним росчерком» невозможно.
Основные определения
Граф – это конечное множество элементов с заданным на нем бинарным отношением.
G = <V, E>, где V – конечное множество вершин, а E  V  V – множество дуг.

Если граф не имеет петель, то он называется простым (в противном случае –


графом с петлями).

Если отношение E симметрично, то граф называется неориентированным


(в противном случае – ориентированным).
В изображении неориентированного графа пары встречных дуг принято изображать
линией без стрелок и называть ребром.
Иногда допускаются графы с кратными ребрами (мультиграфы).
Степени и инцидентность

3
2
1 4

Говорят, что если задана дуга (ребро) e = <v1, v2>, то такую дугу (ребро) называют
инцидентной вершинам v1 и v2, а вершины, соответственно, инцидентными
дуге (ребру) e.
Полустепенью исхода ps(v) называется количество дуг, инцидентных вершине v и
исходящих из нее.
Полустепенью захода pd(v) называется количество дуг, инцидентных вершине v и
входящих в нее.
Степенью вершины p(v) называется сумма полустепеней исхода и захода
p(v) = ps(v) + pd(v),

В неориентированном графе ребра, вообще говоря, считаются один раз (то есть
степенью вершины называется число ребер, инцидентных вершине), но степень петли
считается два раза (один раз как «исходящее» ребро, а другой раз – как «входящее».
Пути и маршруты
3 1–2–3–7 –8–1
2 4

1 5 5

8 6
7

Путь (маршрут) в графе – это чередующаяся последовательность вершин и дуг


(ребер), начинающаяся и заканчивающаяся вершиной, в которой каждое ребро
инцидентно соседним вершинам.
Путь называется замкнутым (контуром или циклом), если первая и последняя
вершины в нем совпадают.
Длина пути – это количество ребер в нем.
Путь называется простым, если никакая вершина (кроме первой и последней)
не участвует в нем дважды.
Связность
3 вершины 1 и 3 – связаны;
2 4 вершины 2 и 4 – нет.
изображенный граф –
1 5 несвязный

8 6 две компоненты связности:


7 (1, 2, 3, 7, 8) и (4, 5, 6)

Две вершины называются связанными, если существует путь, начинающийся


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

2 3 граф на рисунке – несвязный


(между вершинами 1 и 6 нет пути).

1 6

4 5

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

Граф называется сильно связным, если для


любой пары его вершин существует 1
путь из каждой из этих вершин в другую.
Граф называется полным, если для любой 3 4
пары его вершин существует дуга (ребро)
из каждой из этих вершин в другую.
2
Клика – максимальный полный подграф. 6 5
Мосты, точки сочленения

Мостом в графе называется ребро, при удалении которого происходит увеличение


числа компонент связности графа.

Точкой сочленения в графе называется вершина, при удалении которой вместе


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

Висячей вершиной называется вершина степени 1. Ребро, соединяющее висячую


вершину с другой вершиной графа, всегда является мостом.
Представление графов. Матрица смежности

Граф:
3
1 2 3 1 2 3 4 5 6 7 8
2 1

4
5
3 2 4 5
6 1 ∞
0 1
3 ∞
0 ∞
1
0 ∞
0 1
5 ∞
0 ∞
0
1
6 6
7 8 ∞
1
0 ∞
0 ∞
0 ∞
0 ∞
0 ∞
1
0 1
2 ∞
0
2

3 ∞
0 ∞
0 ∞
0 ∞
0 1 ∞
0 ∞
0 1
4
Удобно:
4 1
2 ∞
0 ∞
0 ∞
0 ∞
0 1
6 ∞
0 ∞
0
 Добавлять и удалять ребра
5 ∞
0 ∞
0 ∞
1
0 ∞
0 ∞
0 ∞
0 ∞
0 ∞
1
0
 Проверять смежность вершин
6 ∞
1
0 1
3 ∞
0 ∞
1
0 ∞
0 ∞
0 1
6 ∞
0
Неудобно:
7 ∞
0 ∞
1
0 ∞
0 ∞
0 ∞
0 ∞
1
0 ∞
0 ∞
0
 Добавлять и удалять вершины
8 ∞
0 ∞
0 ∞
1
0 ∞
0 1 ∞
0 ∞
0 ∞
0
 Работать с разреженными графами
Представление графов. Матрица инцидентности

Граф:
3 1-2 1-4 1-6 2-6 2-7 3-5 3-8 4-6 5-8 6-7
1 2 3
2 1
5 4 5 1 -1
-3
1 1
2 -1
-5
1 0 0 0 0 0 0 0
4 3 2
6
1
2 1
3 0 0 1
3 -1
-2
1 0 0 0 0 0
6 6
7 8
3 0 0 0 0 0 -1
1 -1
-4
1 0 0 0

Удобно: 4 0 -1
-2
1 0 0 0 0 0 -1
-6
1 0 0
5 0 0 0 0 0 1 0 0 1 0
 Менять нагрузку на ребра
 Проверять инцидентность 6 0 0 1
5 -1
-3
1 0 0 0 1
6 0 -1
-6
1
7 0 0 0 0 1
2 0 0 0 0 1
6
Неудобно:
8 0 0 0 0 0 0 1
4 0 -1
1 0
 Добавлять и удалять вершины
 Работать с разреженными графами
Представление графов. Списки смежности

Граф:
2 3 4 6 5
3
1 2 3 1 6 7 2
2 1 1
4
5
3 2 4 5 2 5 1 8 4
6
1 3
6 6
7 8 4 1 2 6 6
5 3 8
6
Удобно: 7 1 2 3 4 7 6
 Искать вершины, смежные с данной 8
2 6
 Добавлять ребра и вершины
3 5 1
 Работать с разреженными графами

Неудобно:
 Проверять наличие ребра
 Удалять ребра и вершины
Представление графов. Список ребер

Граф:
1 2 3
3
1 2 3
2 1
1 4 2
4
5
3 2 4 5
6
1
6 7 8 1 6 5
6

2 6 3
Удобно:
2 7 2
 Добавлять и удалять ребра
 Упорядочивать ребра по возрастанию нагрузки 3 5 1
 Представлять сильно разреженные графы
3 8 4
Неудобно:
4 6 6
 Определять смежность вершин и ребер
 Осуществлять перебор инцидентных заданной 5 8 1
вершине ребер
6 7 6