Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_SiAOD_2021.docx
Скачиваний:
169
Добавлен:
01.04.2022
Размер:
5 Mб
Скачать
  1. Алгоритмы поиска путей. Дейкстры.(Динамическое программирование)

Граф - ориентированный или частично ориентированный

  • Берется начальная точка, далее обозначаются точки до которых можно добраться - значениями ребра(весом), а те, до которых невозможно добраться из начальной точки - бесконечностью или 0, только после всех этих действий начальная точка является обработанной.

!!Также если из точки нельзя никуда добраться, тогда она считается обработанной

  • Далее, берем другую точку(тоже не обработанную) и рассматриваем пути до других необработанных точек. Если прохождение по ребрам от нашей точки до необработанной точки, меньше, чем значение которое было поставлено при предыдущем прохождении до этой точки, то ее значение веса меняется на новое, меньшее значение. Только после этих действий исходная точка, с которой проходило сравнение является обработанной

  • И так далее продолжается пока все точки не пройдешь

Подытожим алгоритм для необработанной точки: берем точку, обрабатываем ее соседей(пишем вес точки), далее начальная точка считается обработанной и идем далее

https://www.youtube.com/watch?v=-cuoV89nRGo - если не понимаете

https://www.youtube.com/watch?v=54LoGg7dfsc - если не понимаете

Важно: Алгоритм не работает с отрицательными весами, то есть если мы уходим в минус, то он себя плохо показывает

Сложность в простейшем случае - О (LOGv V^2) - очень странное значение

Построение таблицы всех кратчайших расстояний будет занимать O(V^3 * log V)

В простейшем случае, когда для поиска вершины с минимальным значением просматривается всё множество вершин Для разреженных графов

  1. Алгоритмы поиска путей. Беллмана-Форда.(Динамическое программирование)

Граф должен быть ориентированный

Алгоритм работает также как и у Дейкстры, только и с отрицательными весами. То есть обрабатывает пары точек, чтобы найти минимальный путь

  1. Алгоритмы поиска путей. Джонсона.(Динамическое программирование)

Он состоит из 2 алгоритмов Беллмана-Форда и дейкстры

  • Алгоритм Беллмана-Форда используется для предварительной обработки графа, заменяя веса ребер на неотрицательные

  • Далее к получившемуся графу многократно применяется алгоритм Дейкстры

Алгоритм Джонсона:

  • Строится дополнительная вершина, соединяется со всеми другими вершинами. При этом новые дуги изначально имеют вес, равный нулю.

  • Применяется алгоритм Беллмана-Форда - вычисляются расстояния от новой вершины до остальных.

  • Изменяем веса дуг, используя значения кратчайших путей, полученные в предыдущем пункте. Используем формулу: D(u,v) = D(u,v) + h(u) - h(v)

  • Дополнительная вершина удаляется

  • Алгоритм Дейкстры применяется ко всем вершинам.

D(u,v) - вес ребра от u до v

h(u) -расстояние по беллману форду от новой вершини до u

h(v) - расстояние до вершины v, которое было изначально

Сложность: O( (V^2) * log(V)+VE), где V- количество вершин, а Е - количество ребер

Преимущества:

1) Работает с отрицательными весами ребер.

2) Асимптотически быстрее алгоритма Флойда на разреженных графах.

3) Кратчайшие пути находятся между всеми парами вершин.