Алгоритмы поиска кратчайших путей на графах нашли свое применение в различных областях и сферах деятельности человека. Такие алгоритмы используются в картографических сервисах, при построении пути GPS-навигатора, для представления и анализа дорожной сети и во многих других областях.
При проектировании компьютерных сетей, телевизионных линий, трубопроводов и строительстве дорог необходимо минимизировать затраты на прокладку коммуникаций. Прежде всего, целесообразно выбрать минимальный по длине маршрут прокладки коммуникаций. Например, необходимо соединить телефонным или оптоволоконным кабелем несколько зданий, расстояния между которыми различны. Возникает задача определения маршрута прокладки кабеля минимальной длины, но при этом к каждому зданию. Для решения таких задач часто используют теорию графов.
В настоящее время существует большое число алгоритмов и подходов, которые решают данные задачи. Кроме того, в большинстве своем алгоритмы можно логически разделить на два класса - алгоритмы поиска кратчайшего расстояния от одной вершины до всех остальных и алгоритмы поиска кратчайших расстоянии между каждой парой вершин. Из первого класса самыми яркими представителями являются различные модификации алгоритмов Дейкстры и Беллмана-Форда. Для решения задач второго класса часто используются алгоритмы Флойда-Уоршелла и алгоритм Джонсона.
Наиболее распространённой библиотекой, использующейся для решения этих задач, является BGL (Boost Graph Library). Также для работы с графами используется библиотека LEDA. Однако эти библиотеки включают в себя только последовательные версии алгоритмов для решения задач на графах.
Актуальность:
С ростом многопроцессорных архитектур мы получили мощный инструмент для эффективного расчета искомых расстояний - мы получили возможность запускать эти алгоритмы на нескольких вычислительных ядрах. При этом в контексте с параллельными алгоритмами на графах встал вопрос об эффективном использовании ресурсов системы. Эта задача, однако, не имеет такого высокого разнообразия решений, как в случае однопоточного алгоритма. Существующие же решения довольно специфичны и не всегда работают эффективно на всех графовых структурах.
Объект работы: параллельный алгоритм нахождения кратчайших путей в графе.
Предмет исследования: сравнительный анализ параллельных реализаций алгоритмов нахождения кратчайшего пути на графе на языке программирования C++.
Цель работы: реализовать параллельные версии алгоритмов нахождения кратчайших путей на графе, выявить их достоинства и недостатки.
Для достижения цели работы необходимо решить следующие задачи:
1) Рассмотреть основные понятие теории графов и алгоритмы решения классической задачи на графах.
2) Реализовать параллельные версии распространенных и востребованных алгоритмов на языке C++.
3) Проверить работоспособность и корректность работы программ.
4) Выявить достоинства, каждой из реализаций алгоритмов.
Отчет состоит из введения, трех глав и заключения.
В первой главе представлены теоретические аспекты теории графов, основные алгоритмы для решения задач с графами.
Во второй главе описана реализация параллельных алгоритмов Флойда и Джонсона на языке C++, и тестирование их работы.
В третьей главе производится сравнительный анализ реализаций.
В ходе выполнения бакалаврской работы рассмотрены теоретические аспекты теории графов, алгоритмы решения классической задачи нахождение кратчайшего пути, достоинства и недостатки алгоритмов, а также реализации параллельных алгоритмов Беллмана-Форда и Джонсона на языке программирования C++.
Поиск кратчайшего пути - важная задача, возникающая в разных областях науки и техники: в экономике, робототехнике, в компьютерных играх и так далее. Исходя из того, что для решения всех четырех классических типов задач поиска кратчайших путей на графе, достаточно решить задачу 4 типа (нахождения кратчайшего пути от всех вершин ко всем вершинам), были реализованы параллельные версии классических алгоритмов для решения задач 4 типа.
В результате работы были пошагово реализованы параллельные алгоритмы Флойда, Джонсона на языке программирования C++ с применением технологии параллельного программирования OpenMP.
Вычислительные эксперименты, состоящие в сравнении времени работы данных параллельных алгоритмов, с последовательными аналогами, показали, что параллельный алгоритм Флойда позволяет получить значительно лучшее ускорение, чем параллельный алгоритм Джонсона.
Алгоритм Флойда так же показал, что с возрастанием количества вершин графа наибольшее ускорение получается при использовании наибольшего количества потоков. И напротив, для небольших графов выгоднее использовать меньшее количество потоков.
Однако в рамках рассмотренной задачи с графом карты дорог, алгоритм Джонсона значительно выигрывает, за счет того, что в основе лежит алгоритм Дейкстры эффективно работающий на разряженных графах.
1. Громович, Ю. Детерминированные подходы к алгоритмизации труднорешаемых задач. Часть I: Основные определения / Ю. Громович - Эвристические алгоритмы и распределенные вычисления. - 2014. - T.1, №2.-С. 30-32.
2. Макаркин, С. Б. Геометрические методы решения псевдогеометрической версии задачи коммивояжера / С. Б. Макаркин, Б. Ф. Мельников - Стохастическая оптимизация в информатике. - 2013. - Т. 9, № 2. - С. 54-72.
3. Емеличев, В. А. Лекции по теории графов / О. И. Мельников, В. И. Сарванов, Р. И. Тышкевич - Либроком - Москва. - 2012. - 392 с.
4. Берцун, В. Н. Математическое моделирование на графах. Часть 2: Томск/ В. Н. Берцун - Томский университет, - 2013. - 88 с.
5. Черноскутов, М. А Балансировка нагрузки в ГПУ-реализации поиска в ширину на графе / М. А. Черноскутов - Вычисл. методы и программирование. - 2013. - Т. 14. - С. 54-62.
6. Овчинников, В. Графы в задачах анализа и синтеза структур сложных систем / В. Овчинников - МГТУ им. Н. Э. Баумана. - 2014. - 424 с.
7. Лафоре, Р. Программирование в C++ / Р. Лафоре - Питер. - 2015.- 928 с.
8. Поляков, И. В. Алгоритмы поиска путей на графах большого размера / И. В. Поляков, А. А. Чеповский, А. М. Чеповский - НИУ Высшая школа экономики. - 2014. - Т. 19.
9. Кормен, Т. Алгоритмы: построение и анализ. 2-е издание / Т. Кормен, Ч. Лейзерсон, Р. Ривест, К. Штайн - М.: Вильямс. - 2013. - 1296 с.
10. Гергель, В. П. Теория и практика параллельных вычислений. / В. П. Гергель - Интуит Бином. Лаборатория знаний. - 2014. - 424 с.
Литература на иностранном языке
11. Gaurav Hajela M. P. Parallel Implementations for Solving Shortest Path Problem using Bellman-Ford / International Journal of Computer Applications. 2014.
12. Julian Shun G. E. B. Ligra: A Lightweight Graph Processing Framework for Shared Memory / ACM SIGPLAN Notices. - 2013.
13. Umut Acar Arthur Charguerard M. R. Fast Parallel Graph-Search with Splittable and Catenable Frontiers. - 2015.
14. Umut Acar Arthur Charguerard M. R. Theory and Practice of Chunked Sequences / Algorithms-ESA 2014. - 2014.
15. Takaaki Hiragushi, Daisuke Takahashi. Efficient Hybrid Breadth-First Search on GPUs. Algorithms and Architectures for Parallel Processing / Lecture Notes in Computer Science. - 2013. - Vol. 8286. - P. 40-50.
16. Koji Ueno, Toyotaro Suzumura. Parallel distributed breadth first search on gpu - IEEE Intern. / Conf. on High Performance Computing (Bangalore, 18-21 Dec., 2013). Bangalore, - 2013. - P. 314-323.
17. Merrill D., Garland M., Grimshaw A. Scalable GPU graph traversal / Proc. of the 17th ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming (New Orleans, 25-29 Febr., 2012). - New York. - 2012. - P. 117-128.
18. Work-Efficient Parallel GPU Methods for Single-Source Shortest Paths / IEEE 28th Intern. Parallel and Distributed Processing Symposium (Phoenix, 19-23 May, 2014). - Washington. - 2014. - P. 349-359.
19. Sedgewick R. Algorithms in C++ Part 5: Graph Algorithms, 3rd Edition. / Addison-Wesley Professional. - 2001. - 528 p.
20. Pape U. Implementation and efficiency of moor-algorithms for the shortest route problem / Mathematical programming 7. - 2012. - P. 212-222.