Содержание
- 2. Графы
- 3. Нелинейные структуры данных Нелинейные структуры позволяют выражать более сложные отношения между элементами Множество предметных областей описываются
- 4. Примеры графовых структур: Оглавление книги Организационная структура предприятия Файловая система Пространство имён DNS Сеть автодорог Логистические
- 5. Граф G [R,A] – Это совокупность двух множеств – вершин R и рёбер (в неориентир.) или
- 6. Ориентированный (направленный) граф (орграф) Пусть вершины pi,pj – концевые точки ребра а Тогда если порядок обхода
- 7. Понятия Помеченный граф, если вершины имеют метки (числовые или текстовые) 2 вершины смежные, если соединены одним
- 8. Важные задачи теории графов Семь мостов Кёнигсберга (1736, Л. Эйлер) Задача коммивояжёра – поиск самого выгодного
- 9. Сеть (транспортная сеть, flow network) – Это ориентированный граф G = (V,E), в котором каждое ребро
- 10. Поток в сети Потоком (англ. flow) f в сети G является действительная функция f:V×V→R, удовлетворяющая условиям:
- 11. Представление графа в программе Вершины в графе – экземпляры сущностей, описываемых набором полей с данными (аналогично
- 12. 1. Матрица смежности – Это двумерный массив – квадратная матрица Для неориентированных графов В ячейке 0
- 13. 2. Матрица инцидентности (инциденции) Инцидентность – отношение между парой вершин и ребром Инциденция – тройка вида
- 14. 3. Список смежности – Набор списков, i-й из которых содержит номера вершин, в которые идут рёбра
- 15. 4. Список рёбер В каждой строке записываются две смежные вершины, инцидентные ребру (для взвешенного графа и
- 16. Обход графа Обход – это процесс систематического просмотра всех рёбер или вершин графа с целью отыскания
- 17. 1. Поиск в ширину (breadth-first search, BFS) Подразумевает поуровневое исследование графа: Сначала посещается узел-источник – произвольно
- 18. Особенности алгоритма поиска в ширину: При обнаружении заданной вершины (целевого узла) построенный путь является кратчайшим Для
- 19. Применения алгоритма поиска в ширину: Поиск кратчайшего пути в невзвешенном графе (ориентированном или неориентированном) Поиск компонент
- 20. Реализация на C++ (с использованием очереди STL)
- 21. 2. Поиск в глубину (Depth-first search, DFS) Предполагает продвижение вглубь до тех пор, пока это возможно
- 22. Особенности алгоритма поиска в глубину: Алгоритм работает как на ориентированных, так и на неориентированных графах Применимость
- 23. Применения алгоритма поиска в глубину: Поиск любого пути в графе Поиск лексикографически первого пути в графе
- 24. Реализация на C++ (с использованием очереди STL) стеком
- 25. Реализация на C++ (с использованием очереди STL) рекурсией
- 26. Обход в глубину при программировании игр В типичной игре существует постоянно расширяющийся граф вариантов (например, «крестики-нолики»)
- 27. Транзитивное замыкание Бинарное отношение R на множестве X называется транзитивным, если для любых трёх элементов a,
- 28. Транзитивное замыкание орграфа Транзитивное замыкание в орграфе – добавление дуг между парами вершин, если в исходном
- 29. Алгоритм Уоршелла построения транзитивного замыкания орграфа Матрица смежности содержит все допустимые одношаговые пути – основа алгоритма
- 30. Первая строка A: В ячейке С – единица, т.е. существует путь от A к C Если
- 31. Строки В, С, D: Столбец A содержит 1, указывая на существование ребра от B к A
- 32. Строка Е: В строке Е есть ребро от Е к C В столбце Е есть ребро
- 33. Результат: В матрицу смежности были добавлены две единицы Измененная матрица показывает, к каким узлам можно перейти
- 34. Дизъюнктивное объединение строк Аналогичный результат можно получить с помощью дизъюнктивного объединения строк В текущей строке: Игнорируются
- 35. Реализация алгоритма Уоршелла Внешним циклом перебираем вершины, которые могут быть промежуточными (транзитными) Средним циклом перебираем вершины,
- 36. Задача поиска кратчайшего пути на графе Наиболее распространённая задача на взвешенных графах Задача находит практическое применение
- 37. Алгоритм Дейкстры Предложен в 1959 г. Предназначен для поиска кратчайшего пути в ориентированном взвешенном графе, при
- 38. Постановка задачи Варианты: Найти кратчайшие пути из текущего города до других городов Найти маршрут минимальной стоимости
- 39. Инициализация Каждой вершине из V сопоставим временную метку — минимальное известное расстояние от этой вершины до
- 40. Шаг 1. Выберем вершину W, которая имеет минимальную метку (сейчас это вершина 1) Рассмотрим все вершины,
- 41. Шаг 2. Перебрав все вершины, в которые есть прямой путь из W, саму W отмечаем как
- 42. Шаг 3. Рассмотрим все непосещённые вершины, в которые есть прямые пути из 5 Снова находим сумму
- 43. Результат Повторяем все перечисленные действия, пока есть непосещённые вершины В результате метки будут равны минимальному расстоянию
- 44. Пример реализации на С++
- 45. Алгоритм Флойда-Уоршелла Динамический алгоритм для нахождения кратчайших расстояний между всеми вершинами взвешенного ориентированного графа без циклов
- 46. Постановка задачи Дан взвешенный ориентированный граф G(V,E), в котором вершины пронумерованы от 1 до n Требуется
- 47. Описание алгоритма Перед началом алгоритма матрица d заполняется длинами рёбер графа (или признаками их отсутствия): d0uv
- 48. Псевдокод d0uv = w; for i∈V for u∈V for v∈V diuv =min(di-1uv, di-1ui + di-1iv) В
- 49. Пример реализации на С++
- 50. Остовное (стягивающее, покрывающее) дерево в графе – Можно получить из него удалением некоторых рёбер Может существовать
- 51. Пример: Есть n городов, их необходимо соединить дорогами, так, чтобы был путь из любого города в
- 52. Решения: Алгоритм Прима → Алгоритм Краскала Алгоритм Борувки Алгоритм обратного удаления.
- 53. Алгоритм Прима Алгоритм построения минимального остовного дерева (МОД) взвешенного связного неориентированного графа Войцех Ярник (1930), Роберт
- 54. Идея алгоритма Прима Дан связный неориентированный граф Если разделить вершины графа на два множества (обработанные и
- 55. Реализация алгоритма Прима
- 56. Алгоритм Краскала (Крускала) Эффективный алгоритм построения МОД взвешенного связного неориентированного графа Предполагает сортировку всех рёбер в
- 57. Идея алгоритма Краскала Пусть есть некоторые рёбра, входящие в МОД Тогда среди всех рёбер, соединяющих различные
- 58. Иллюстрация работы алгоритма
- 59. Шаги алгоритма Краскала Сортировать все рёбра от малого веса до высокого Взять ребро с наименьшим весом
- 60. Реализация алгоритма
- 61. Топологическая сортировка Это графовый метод, используемый для перестановки (расстановки, нумерации) элементов (вершин) в определённом порядке, задаваемом
- 62. Задача Условная структура курсов, необходимых для получения некой учёной степени Здесь для некоторых курсов обязательно прохождение
- 63. Топологический порядок – Это перестановка вершин в соответствии с порядком, задаваемым всеми рёбрами графа Перестановка –
- 64. Алгоритмы топологической сортировки: Алгоритм Кана Алгоритм Тарьяна Алгоритм на основе поиска в глубину (DFS). →
- 65. Алгоритм топологической сортировки ациклического графа Будем присваивать номера в убывающем порядке: от самого большого к самому
- 66. Реализация алгоритма
- 68. Скачать презентацию