Сравнение алгоритмов
Для сравнения эффективности двух алгоритмов поиска кратчайших расстояний: алгоритма Флойда-Уоршелла и алгоритма Дейкстры был проведён ряд прогонов программы для различного числа вершин в графе (от 100 до 1000 с шагом 50). Средняя степень вершины 6, для усреднения на каждом шаге алгоритм запускался 5 раз. На рисунке 2 представлена зависимость времени выполнения алгоритмов от количества вершин.
Рисунок 2. Сравнение алгоритмов поиска кратчайших расстояний
Как видно из Рисунка 1, время выполнения алгоритма Флойда–Уоршелла возрастает с увеличением числа вершин, однако алгоритм Дейкстры (при многократном запуске для получения всех пар) растёт ещё быстрее. При 100 вершинах оба алгоритма показывают близкое время, но при 1000 вершинах алгоритм Дейкстры выполняется примерно в 3 раза медленнее, чем Флойда–Уоршелла.
Это объясняется особенностями реализации. Алгоритм Флойда–Уоршелла имеет очень простую внутреннюю структуру – три вложенных цикла с минимальным количеством проверок и арифметических операций, что даёт низкую константу в оценке сложности . Алгоритм Дейкстры в классической реализации (без приоритетной очереди) требует на каждом из запусков:
линейного поиска вершины с минимальным
расстоянием (
),
релаксации всех рёбер (в матричной
реализации – снова
).
Таким
образом, суммарная сложность составляет
,
но с большей константой из-за дополнительных
проверок и необходимости обнулять
массивы visited.
При малых размерах графа (до 200 вершин) разница незначительна. При увеличении числа вершин до 1000 накладные расходы Дейкстры становятся доминирующими, и она начинает уступать Флойду.
Таким образом, для задачи нахождения кратчайших расстояний между всеми парами вершин на графах средней размерности (до 1000 вершин) и при использовании матрицы смежности алгоритм Флойда–Уоршелла является предпочтительным благодаря своей простоте и низкой константе. Алгоритм Дейкстры в его классической квадратичной версии проигрывает из-за необходимости многократного повторения операций.
Вывод
В ходе выполнения лабораторной работы были достигнуты следующие результаты:
1. Изучены два классических алгоритма поиска кратчайших путей на графах: Флойда–Уоршелла (для всех пар вершин) и Дейкстры (от одной вершины ко всем). Рассмотрены их теоретические основы, алгоритмы и оценки временной сложности.
2. Разработана программа на языке C++, реализующая оба алгоритма и позволяющая проводить автоматизированное сравнение их эффективности на разреженных графах с числом вершин до 1000.
3. Экспериментально получены зависимости времени выполнения алгоритмов от количества вершин графа. Подтверждён кубический характер роста времени для обоих методов.
4. Установлено, что в классической матричной реализации при решении задачи поиска кратчайших расстояний между всеми парами вершин алгоритм Флойда–Уоршелла работает быстрее (примерно в 3 раза) многократного запуска алгоритма Дейкстры благодаря более низкой константе в оценке сложности.
Таким образом, цель работы достигнута: алгоритмы реализованы, их характеристики исследованы, полученные результаты сопоставлены с теорией.
