Скачиваний:
7
Добавлен:
15.08.2023
Размер:
71.55 Кб
Скачать

Алгоритм Дейкстры

Алгоритм Дейкстры – алгоритм поиска кратчайшего расстояния от одной вершины графа до всех остальных. Перед началом работы каждой вершине приписывается её вес: для начальной вершины, для которой производится поиск расстояний, он равен нулю, для всех остальных – бесконечность. Затем инициализируется обход графа – обновляются веса всех смежных вершин, вес вычисляется исходя из длины ребра. После чего из смежных вершин выбирается та, вес которой минимален, она становится ключевой. К ключевой вершине повторяются все предыдущие действия, но вес рассчитывается из минимума нынешнего веса смежной вершины и суммы весов ключевой вершины и ребра, что соединяет её со смежной вершиной. Всё это повторяется до тех пор, пока не будет пройден весь граф и не будет найдено кратчайшее расстояние до каждой из вершин.

Сравнивая с алгоритмом Флойда-Уоршелла, алгоритм Дейкстры более частный, поскольку он находит кратчайшие расстояния только от одной вершины ко всем.

Пример работы

Дан взвешенный неориентированный граф:

Рис. 4. Граф, который обрабатывается алгоритмом Дейкстры.

  1. Шаг 1. Вес всех вершин, кроме начальной (пусть будет 1), устанавливается равным бесконечности. Вес начальной вершины 1 устанавливается равным нулю.

  2. Шаг 2. Вес вершин, которые смежные с начальной, обновляется: 2 : 5 5 : 3 3 : 7

  3. Шаг 3. Следующей точкой для действий выбирается та, вес которой минимален. Это вершина 5. Обновляется вес вершин, которые смежны с вершиной 5 – в том случае, если старый вес больше, чем сумма веса вершины 5 и ребра, что соединяет вершину 5 со смежной вершиной: 2 : 4 4 : 5

    Выбор ближайшей вершины

    Обновление веса смежных вершин

    Конец

  4. Шаг 4. Все вершины посещены, алгоритм прекращает свою работу. Затрачено 4 шага. Кратчайшие расстояния от вершины 1 до всех остальных вершин графа найдены и равны: 1 – 2 : 4 1 – 3 : 7 1 – 4 : 5 1 – 5 : 3

Сравнение

Проведя сравнение времени, затрачиваемого на алгоритмы Флойда-Уоршелла и Дейкстры были получены следующие графики:

Время в нс

Количество вершин графа

На рисунке оранжевым цветом представлен алгоритм Дейкстры, синим – Флойда-Уоршелла. По графику видно, что при увеличении размерности матрицы смежности (то есть, при увеличении количества вершин графа) время, затрачиваемое на обработку алгоритмов, увеличивается тоже. Но стоит отметить, что на алгоритм Флойда-Уоршелла времени затрачивается много больше, нежели чем на алгоритм Дейкстры. Это связано с тем, что сложность алгоритма Флойда-Уоршелла сильно выше, чем алгоритма Дейкстры – (количество вершин)^3.

Это также подтверждается небольшим примером: в графе на 5 вершин на алгоритм Флойда-Уоршелла было затрачено 5 шагов, а на алгоритм Дейкстры – 4 шага.

Выводы

В ходе работы:

  1. Изучены алгоритмы Флойда-Уоршелла и Дейкстры.

  2. Составлена программа подсчета временных затрат с учетом требований по точности проводимых измерений и обладающая возможностью создать граф любой размерности и любого содержания.

  3. Визуализированы полученные данные посредством диаграммы на Рис. 6.

  4. Сделан вывод, что алгоритм Дейкстры быстрее алгоритма Флойда-Уоршелла ввиду того, что алгоритм Флойда обладает более высокой сложностью в любом случае – O(n^3), когда для алгоритма Дейкстры в самом неблагоприятном случае - O(n^2). Это же подтверждается количеством затраченных шагов для небольшого примера: 5 шагов для Флойда-Уоршелла и 4 шага для Дейкстры.