Slide 1

Slide 1 text

12 апреля 2022 [email protected] Анастасия Олеговна Хлобыстова Ассистент кафедры информатики Графы Артём Андреевич Вяткин

Slide 2

Slide 2 text

2/55 2/55 Введение Есть объекты, между парами которых существуют связи, например: ● Транспортные маршруты между городами ● Социальные связи между людьми ● Вложенность папок и файлов в файловой системе ● Ссылки в веб-документах ● … Как это обрабатывать?

Slide 3

Slide 3 text

3/55 3/55 Определение Граф — пара множеств , где ● — непустое множество вершин ● — множество ребер — пар вершин Граф может быть ● Неориентированным, в нем ребра — неупорядоченные пары ● Ориентированным, где ребра — упорядоченные пары, тогда они зовутся дугами

Slide 4

Slide 4 text

4/55 4/55 О ребрах: инцидентность Если ребро соединяет вершины и , то и — инцидентны, как и и

Slide 5

Slide 5 text

5/55 5/55 О ребрах: смежность Ребра смежные, если они имеют общую вершину В орграфе имеют общую концевую вершину

Slide 6

Slide 6 text

6/55 6/55 О ребрах: кратность Кратные ребра соединяют одну и ту же пару вершин В случае ориентированного графа — совпадают начала и концы у пары ребер

Slide 7

Slide 7 text

7/55 7/55 О ребрах: петли Петля соединяет одну и ту же вершину

Slide 8

Slide 8 text

8/55 8/55 Вопрос 1 Какие ребра инцидентны вершине ?

Slide 9

Slide 9 text

9/55 9/55 О вершинах: степени Степень вершины — количество ребер, инцидентных вершине

Slide 10

Slide 10 text

10/55 10/55 О вершинах: степени в орграфе Степень входа — число входящих ребер Степень выхода — число выходящих ребер

Slide 11

Slide 11 text

11/55 11/55 О вершинах: висячая Висячая вершина — вершина степени 1 В орграфе — степень захода равна 1, степень выхода — 0

Slide 12

Slide 12 text

12/55 12/55 О вершинах: изолированная Изолированная вершина — вершина, возможно, с петлей, но без входящих ребер

Slide 13

Slide 13 text

13/55 13/55 Обход графа: маршрут Маршрут — последовательность вершин и ребер, где ребро между двумя соседними вершинами соединяет предыдущую и последующую вершины

Slide 14

Slide 14 text

14/55 14/55 Обход графа: цепь Цепь — маршрут, у которого все ребра различны

Slide 15

Slide 15 text

15/55 15/55 Обход графа: путь Путь — цепь, у которой все вершины различны

Slide 16

Slide 16 text

16/55 16/55 Обход графа: цикл Цикл — цепь, у которой все вершины различны, за исключением концевых

Slide 17

Slide 17 text

17/55 17/55 Связность ● Связный граф — между любой парой вершин существует путь ● Связный орграф — сильно связный граф (существует ориентированный путь) ● Слабо связный орграф — граф, в котором после замены дуг ребрами получается связный неориентированный граф ● Компонента связности — максимальный по включению связный граф (так же и для сильной и слабой связности) 2 компоненты связности

Slide 18

Slide 18 text

18/55 18/55 Вопрос 2 Сколько компонент сильной связности?

Slide 19

Slide 19 text

19/55 19/55 Ответ 2

Slide 20

Slide 20 text

20/55 20/55 Виды графов ● Простой граф — граф, в котором нет кратных ребер и петель, в противном случае — мультиграф (псевдограф) ● Полный граф — простой неориентированный граф, где между каждой вершиной существует ребро ● Пустой граф — граф без вершин ● Регулярный граф — граф, в котором степени всех вершин равны ● Плоский граф — граф, изображенный на плоскости без пересечений ребер в точках, отличных от вершин ● Планарный граф — граф, который представим в виде плоского ● Взвешенный граф — граф, в котором каждому ребру сопоставлено значение (вес) Полный граф Регулярный граф Взвешенный граф Пустой граф

Slide 21

Slide 21 text

21/55 21/55 Вопрос 3 Является ли этот граф планарным?

Slide 22

Slide 22 text

22/55 22/55 Формула Эйлера Если граф — плоский, то , где — количество вершин, — количество ребер и — количество граней, включая внешнюю

Slide 23

Slide 23 text

23/55 23/55 Следствие из формулы Эйлера Пусть — связный планарный граф, с вершинами и ребрами. Тогда

Slide 24

Slide 24 text

24/55 24/55 Дерево Дерево это: ● Если неориентированный граф — связный граф без циклов ● Если ориентированный — граф, где только одна вершина имеет степень входа 0 (корень дерева), а у остальных вершин степень захода 1 ● Вершина является листом, если ее степень — 1

Slide 25

Slide 25 text

25/55 25/55 Вопрос 4 Является ли данный граф деревом?

Slide 26

Slide 26 text

26/55 26/55 Некоторые свойства графов ● «Лемма о рукопожатиях»: сумма степеней всех вершин графа равна удвоенному числу его ребер ● Следствие — любой граф имеет четное число вершин нечетных степеней ● Любое дерево с вершинами содержит ребро. Более того, если для связного графа выполняется такое соотношение, то он — дерево ● Полный граф с вершинами имеет ребер

Slide 27

Slide 27 text

27/55 27/55 Вопрос 5 Может ли в государстве, в котором из каждого города выходит 3 дороги, быть ровно 100 дорог?

Slide 28

Slide 28 text

28/55 28/55 Ответ 5 Может ли в государстве, в котором из каждого города выходит 3 дороги, быть ровно 100 дорог? Ответ: не может, так как тогда, по лемме о рукопожатиях,

Slide 29

Slide 29 text

Переходим к информатике!

Slide 30

Slide 30 text

Представление графов

Slide 31

Slide 31 text

31/55 31/55 Матрица смежности ● Матрица смежности — квадратная матрица, где значение равно числу ребер из i-ой вершины в j-ую ● Иногда, особенно если граф неориентирован, петля считается за два ребра ● В случае взвешенного графа можно на место ставить вес ребра ● Определить вес ребра или его наличие можно за ● Матрица занимает памяти, поэтому такой способ представления хорошо подходит для плотных графов

Slide 32

Slide 32 text

32/55 32/55 Матрица инцидентности ● Столбцы — ребра, строки — вершины. ● Неориентированный граф: ○ на месте стоит 1, если i-ая вершина инцидентна j-ому ребру, ○ иначе 0 ● Орграф: ○ на месте стоит 1, если i-ая вершина является началом j-ой дуги ○ если является концом, то –1 ○ иначе 0 ● Матрица занимает памяти

Slide 33

Slide 33 text

33/55 33/55 Список смежности ● Каждой вершине графа сопоставляется список смежных вершин, к которым исходит ребро от данной вершины ● Список занимает памяти

Slide 34

Slide 34 text

34/55 34/55 Операция Матрица смежност и Матрица инцидентн ости Список смежности Проверка наличия ребра Определение степени вершины Использовани е памяти Сравнение представлений графов Матрицы смежности и инцидентности целесообразнее использовать когда: ● Число вершин графа невелико ● Число рёбер графа относительно большое ● В алгоритме часто требуется проверять, соединены ли между собой две вершины ● Матрицы чаще используются в теоретических исследованиях графов Списки смежности целесообразнее использовать когда: ● Число вершин графа велико ● Число рёбер графа относительно невелико ● Во время действия алгоритма часто требуется модифицировать граф ● На практике списки чаще используются в прикладных целях

Slide 35

Slide 35 text

Обходы графа

Slide 36

Slide 36 text

36/55 36/55 Обход в глубину (DFS) 1. Всем вершинам графа присваивается значение «не посещенная». Выбирается первая вершина и помечается как «посещенная» 2. Для последней помеченной, как «посещенная», вершины выбирается смежная вершина, являющаяся первой помеченной как «не посещенная», и ей присваивается значение «посещенная». Если таких вершин нет, то берется предыдущая помеченная вершина 3. Повторить шаг 2 до тех пор, пока все вершины не будут помечены как посещенные ● Временная сложность —

Slide 37

Slide 37 text

37/55 37/55 Пример обхода в глубину (DFS)

Slide 38

Slide 38 text

38/55 38/55 Обход в ширину (BFS) 1. Всем вершинам графа присваивается значение «не посещенная». Выбирается первая вершина и помечается как «посещенная» (и заносится в очередь) 2. Посещается первая вершина из очереди (если она не помечена как посещенная). Все ее соседние вершины заносятся в очередь. После этого она удаляется из очереди 3. Повторяется шаг 2 до тех пор, пока очередь не пуста ● Временная сложность —

Slide 39

Slide 39 text

39/55 39/55 Пример обхода в ширину (BFS)

Slide 40

Slide 40 text

Поиск кратчайшего пути

Slide 41

Slide 41 text

41/55 41/55 Постановка задачи Необходимо найти самый короткий путь, в котором сумма весов ребер (во взвешенном графе) или их количество (невзвешенный граф) будут минимальны Варианты постановки задачи: ● Найти кратчайшие пути до всех вершин, кроме данной ● Найти кратчайший путь между данной парой вершин ● Найти кратчайшие пути между всеми парами вершин

Slide 42

Slide 42 text

42/55 42/55 Алгоритм Дейкстры ● Находит кратчайшие пути от одной вершины до всех остальных ● Можно реализовать за Алгоритм ● Каждой вершине из сопоставим метку — минимальное известное расстояние от этой вершины до ● Алгоритм работает пошагово — на каждом шаге он «посещает» одну вершину и пытается уменьшать метки ● Работа алгоритма завершается, когда все вершины посещены Инициализация. ● Метка самой вершины полагается равной 0, метки остальных вершин — бесконечности ● Это отражает то, что расстояния от до других вершин пока неизвестны ● Все вершины графа помечаются как непосещённые Шаг алгоритма. ● Если все вершины посещены, алгоритм завершается ● В противном случае, из ещё не посещённых вершин выбирается вершина , имеющая минимальную метку ● Мы рассматриваем всевозможные пути, в которых является предпоследним пунктом. Вершины, в которые ведут рёбра из , назовём соседями этой вершины. Для каждого соседа вершины , кроме отмеченных как посещённые, рассмотрим новую длину пути, равную сумме значений текущей метки и длины ребра, соединяющего с этим соседом ● Если полученное значение длины меньше значения метки соседа, заменим значение метки полученным значением длины. Рассмотрев всех соседей, пометим вершину как посещённую и повторим шаг алгоритма

Slide 43

Slide 43 text

43/55 43/55 Пример поиска алгоритмом Дейкстры

Slide 44

Slide 44 text

44/55 44/55 Алгоритм Форда-Беллмана ● Находит кратчайшие пути от одной вершины до всех остальных ● Учитывает отрицательные веса ● Работает за Алгоритм ● Инициализируются расстояния от исходной вершины до всех остальных вершин, как бесконечные, а расстояние до начальной вершины принимается равным 0. Создается массив размера со всеми значениями равными бесконечности, за исключением элемента , где — исходная вершина ● Вторым шагом вычисляются самые короткие расстояния. Следующие шаги нужно выполнять раз, где — число вершин в данном графе ○ Произведите следующее действие для каждого ребра : Если , то обновите ● На этом шаге сообщается, присутствует ли в графе цикл отрицательного веса. Для каждого ребра необходимо выполнить следующее: ○ Если , то в графе присутствует цикл отрицательного веса

Slide 45

Slide 45 text

45/55 45/55 Пример поиска алгоритмом Форда-Беллмана Порядок обхода: (B, E), (D, B), (B, D), (A, B), (A, C), (D, C), (B, C), (E, D)

Slide 46

Slide 46 text

46/55 46/55 Алгоритм А* • Находит расстояние между парой вершин • Предполагается наличие двух эвристических функции- эвристики, которая оценивает расстояние от рассматриваемой вершины к конечной (обозначается как h(x)) • Так же рассматривается функция g(x), которая оценивает расстояние от начальной до текущей • На каждом шаге выбирается узел с наименьшим значением f(x) = g(x) + h(x), после чего этот узел помечается и раскрывается, добавляя вершины, которые можно просмотреть на следующем шаге. • Алгоритм работает до тех пор, пока не дойдет до целевой вершины

Slide 47

Slide 47 text

Матрица достижимости

Slide 48

Slide 48 text

48/55 48/55 Матрица достижимости • Рассмотрим матрицу смежности — она показывает, все пути длины 1. • Если булево перемножить матрицу саму на себя, то получим c информацией о всех путях длины 2. • Далее, если раз перемножить матрицу , то получим информацию о путях длины • В итоге булева сумма даст информацию о всех путях в матрице. • Если перемножать и складывать как обычные матрицы, то получим еще и информацию о количестве путей из одной вершины в другую

Slide 49

Slide 49 text

49/55 49/55 Пример матрицы достижимости

Slide 50

Slide 50 text

Топологическая сортировка

Slide 51

Slide 51 text

51/55 51/55 Топологическая сортировка Топологическая сортировка ориентированного ориентированного ациклического графа представляет собой упорядочивание вершин таким образом, что для любого ребра номер вершины меньше номера вершины Топологическая сортировка для графа может быть не одна, к примеру (см. рисунок): • 7, 5, 11, 3, 8, 2, 9, 10 • 3, 7, 5, 8, 11, 10, 9, 2 Применяется, например, при распараллеливании алгоритмов, когда по описанию алгоритма нужно составить граф зависимостей его операций, и, отсортировав топологически, определить, какие операции могут выполняться параллельно

Slide 52

Slide 52 text

52/55 52/55 Алгоритм ТС с использованием DFS ● Изначально все вершины «белые». ● Для каждой вершины делаем шаг алгоритма. Шаг алгоритма: ● Если вершина «чёрная», ничего делать не надо. ● Если вершина «серая» — найден цикл, топологическая сортировка невозможна. ● Если вершина «белая»: ○ Красим её в «серый» ○ Применяем шаг алгоритма для всех вершин, в которые можно попасть из текущей ○ Красим вершину в «чёрный» и помещаем её в начало окончательного списка

Slide 53

Slide 53 text

53/55 53/55 Пример топологической сортировки 1/2

Slide 54

Slide 54 text

54/55 54/55 Пример топологической сортировки 2/2

Slide 55

Slide 55 text

12 апреля 2022 [email protected] Анастасия Олеговна Хлобыстова Ассистент кафедры информатики Графы Артём Андреевич Вяткин