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. 2/55 2/55 Введение Есть объекты, между парами которых существуют связи,

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

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

    общую вершину В орграфе имеют общую концевую вершину
  4. 6/55 6/55 О ребрах: кратность Кратные ребра соединяют одну и

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

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

    1 В орграфе — степень захода равна 1, степень выхода — 0
  7. 13/55 13/55 Обход графа: маршрут Маршрут — последовательность вершин и

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

    все вершины различны, за исключением концевых
  9. 17/55 17/55 Связность • Связный граф — между любой парой

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

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

    где — количество вершин, — количество ребер и — количество граней, включая внешнюю
  12. 24/55 24/55 Дерево Дерево это: • Если неориентированный граф —

    связный граф без циклов • Если ориентированный — граф, где только одна вершина имеет степень входа 0 (корень дерева), а у остальных вершин степень захода 1 • Вершина является листом, если ее степень — 1
  13. 26/55 26/55 Некоторые свойства графов • «Лемма о рукопожатиях»: сумма

    степеней всех вершин графа равна удвоенному числу его ребер • Следствие — любой граф имеет четное число вершин нечетных степеней • Любое дерево с вершинами содержит ребро. Более того, если для связного графа выполняется такое соотношение, то он — дерево • Полный граф с вершинами имеет ребер
  14. 27/55 27/55 Вопрос 5 Может ли в государстве, в котором

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

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

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

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

    смежных вершин, к которым исходит ребро от данной вершины • Список занимает памяти
  19. 34/55 34/55 Операция Матрица смежност и Матрица инцидентн ости Список

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

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

    присваивается значение «не посещенная». Выбирается первая вершина и помечается как «посещенная» (и заносится в очередь) 2. Посещается первая вершина из очереди (если она не помечена как посещенная). Все ее соседние вершины заносятся в очередь. После этого она удаляется из очереди 3. Повторяется шаг 2 до тех пор, пока очередь не пуста • Временная сложность —
  22. 41/55 41/55 Постановка задачи Необходимо найти самый короткий путь, в

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

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

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

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

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

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

    вершины «белые». • Для каждой вершины делаем шаг алгоритма. Шаг алгоритма: • Если вершина «чёрная», ничего делать не надо. • Если вершина «серая» — найден цикл, топологическая сортировка невозможна. • Если вершина «белая»: ◦ Красим её в «серый» ◦ Применяем шаг алгоритма для всех вершин, в которые можно попасть из текущей ◦ Красим вершину в «чёрный» и помещаем её в начало окончательного списка