Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Программирование – 1 курс весна 2022 – 8 занятие

Программирование – 1 курс весна 2022 – 8 занятие

ТиМПИ

April 12, 2022
Tweet

More Decks by ТиМПИ

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  35. Обходы графа

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide