Академический Документы
Профессиональный Документы
Культура Документы
Лекция № 5
Алгоритмы на графах
Что такое граф
В математике
определение графа
Рёбра графа
дается так:
Графом называется
конечное множество
точек, некоторые из
которых соединены
линиями.
Вершина графа
Точки называются
вершинами графа,
а соединяющие
линии – рёбрами.
Схема метро Харьков – это граф
ПОИСК КРАТЧАЙШЕГО ПУТИ
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
1 6
4 5
Ориентированный граф называется связным, если для любых его двух вершин
существует путь из одной из этих вершин в другую.
На рисунке выделены две компоненты связности орграфа.
Граф:
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