
- •Введение
- •Неориентированные графы
- •Основные определения
- •Маршруты, циклы и связность
- •Ориентированные графы
- •Основные определения
- •Маршруты и связность в ориентированных графах
- •Структуры данных для представления графа
- •Матричное представление графов
- •Матрица инциденций
- •Матрица циклов
- •Матрица разрезов
- •Матрица смежности вершин
- •Матрица путей
- •Представление графов в виде списков
- •Упорядоченные графы
- •Задачи нахождения путей в графах
- •Алгоритм вычисления стоимости прохождения между узлами
- •Алгоритм
- •Алгоритм нахождения кратчайшего пути
- •Задачи с одним источником
- •Алгоритм Дейкстры
- •Метод поиска в глубину
- •Алгоритм поиска в глубину на неориентированном графе
- •Поиск в глубину в ориентированном графе
- •Вычислительная сложность алгоритмов
- •Библиографический список
- •Оглавление
Введение
Теория графов дает простой, доступный и мощный инструмент построения моделей и решения задач. Существует много проблем, где требуется построить некоторые сложные системы с помощью определенного упорядочения их элементов. Сюда относятся календарное планирование, задачи теории сетевого планирования и управления, тактические и логические задачи, проблемы построения систем связи и исследования процессов передачи информации, выбор оптимальных маршрутов и потоков в сетях, методы построения электрических сетей, задачи идентификации и пр. Таким же большим является круг экономических задач, проблем выбора структуры социальных групп, игровых задач, головоломок и т.д. Таким образом, область применения теории графов очень широка.
Теория графов имеет в своей основе простейшие идеи и элементы: точки, соединенные линиями. Используя их, теория графов строит богатое многообразие форм, наделяет эти формы интересными свойствами и в результате становится полезным инструментом при исследовании разнообразных систем.
Вместо понятия графа часто используется понятие «сеть». Это особенно относится к случаям, когда кроме основных, чисто структурных соотношений в графе задаются некоторые количественные характеристики точек и линий, образующих граф. В качестве примеров можно назвать электрические сети, сети выполнения работ в проектах, сети потоков. При этом ребрам сети ставятся в соответствие определенные количественные характеристики энергии, затрат и потока.
При конструировании и отладке программ возникают задачи, либо сводящиеся к задачам теории графов, либо использующие таковые в качестве основы для решения. К ним в первую очередь относятся задачи анализа потока управления в программе, задачи тестирования и проверки правильности программы, оценки сложности и времени исполнения.
Неориентированные графы
Основные определения
Пусть
V
– конечное множество некоторых элементов,
и IV
– его тождественное отношение, такое,
что:
Обозначим
Определим
отношение эквивалентности следующим
образом:
(v1,v2) ~ (w1,w2), если (v1,v2) = (w1,w2) или (v1,v2) = (w2,w1). Множество эквивалентных классов, определенное таким образом, обозначим
Каждый
класс эквивалентности содержит два
элемента, так как если
, то [(v1,v2)] = {(v1,v2), (v2,v1)}.
Графом
называется упорядоченная пара G
= (V,
E),
где V
– непустое конечное множество вершин,
а , то есть E
- это множество неупорядоченных пар
различных вершин.
Множество E - это множество ребер графа. Обычно в графе всегда можно определить количество вершин |V| и ребер |E|.
Граф G определяет нерефлексивное, симметричное отношение на множестве V. Обратное утверждение тоже верно: нерефлексивное, симметричное отношение на множестве V определяет граф.
Изображение графа G = (V, E) получается путем расположения различных точек на R2 для каждой вершины v V . Причем, если [v, w] E, проводим линию, соединяющую вершины v и w.
Графы в значительной мере выражают отношения между вершинами, а не их расположение в пространстве. То есть один и тот же граф может быть изображен разными способами (рис. 1).
v1 v2 v3 v2
v1
v3
Рис. 1. Примеры изображения графа
Приведем пример построения графа (рис. 2).
Пусть V={1, 2, 3, 4, 5}.
Тогда IV = {(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)}.
V2 = V V = {(1, 1), (1, 2), (1, 3), (1, 4), (1, 5),
(2, 1), (2, 2), (2, 3), (2, 4), (2, 5),
(3, 1), (3, 2), (3, 3), (3, 4), (3, 5),
(4, 1), (4, 2), (4, 3), (4, 4), (4, 5),
(5, 1), (5, 2), (5, 3), (5, 4), (5, 5)}
= {(1, 1), (1, 2), (1, 3), (1, 4), (1, 5),
(2, 1), (2, 2), (2, 3), (2, 4), (2, 5),
(3, 1), (3, 2), (3, 3), (3, 4), (3, 5),
(4, 1), (4, 2), (4, 3), (4, 4), (4, 5),
(5, 1), (5, 2), (5, 3), (5, 4), (5, 5)}
= {[(v1, v2)], [(v1, v3)], [(v1, v4)], [(v1, v5)],
[(v2, v1)], [(v2, v3)], [(v2, v4)], [(v2, v5)],
[(v3, v1)], [(v3, v2)], [(v3, v4)], [(v3, v5)],
[(v4, v1)], [(v4, v2)], [(v4, v3)], [(v4, v5)],
[(v5, v1)], [(v5, v2)], [(v5, v3)], [(v5, v4)]}.
По
определению
.
Следовательно, может быть, что
.
В результате получили графG
= (V,
E),
причем такой, что |V|
= 5, |E|
= 20.
Рис. 2 . Полный граф
Граф H = (V1, E1) является подграфом графа G = (V, E), если V1 V и E1 E.
Если V1 = V, то граф H является остовным подграфом графа G. Если V1 – непустое подмножество вершин графа (V, E), то подграф (V1, E1), порожденный V1, определяется как
[v, w] E1 v, w V1 и [v, w] E.
Граф G = (V, E) называется полным, если для всех v1, v2 V имеем [v1, v2] E. Полный граф с n вершинами обозначается Kn.
Граф G = (V, E) называется двудольным, если существует разбиение множества его вершин V = {V1, V2} такое, что никакие две вершины из V1 или из V2 не являются смежными. Двудольный граф называется полным, если для любой пары v1 V, v2 V имеем [v1, v2] E. Если |V1| = m и |V2| = n, то полный двудольный граф G = (V, E) обозначается Km,n.