
- •Реферат
- •Содержание
- •Введение
- •1 Разработка блок-схемы алгоритмов
- •2 Разработка псевдокода
- •3 Анализ трудоемкости роста функции
- •4 Программа реализации алгоритмов
- •5 Тестирование программ реализации алгоритмов
- •5.1 Тестирование правильности
- •5.2 Анализ по времени
- •6 Анализ результатов
- •Заключение
- •Список использованных источников
- •Код программы по алгоритму Флойда
- •Код программы по алгоритму Беллмана-Форда
Реферат
Пояснительная записка 18 с., 14 рис., 4 ист., 2 табл., 2 прил.
КРАТЧАЙШИЙ ПУТЬ, ВЕРШИНА, ГРАФ, АЛГОРИТМ ФЛОЙДА, АЛГОРИТМ БЕЛЛМАНА-ФОРДА, МАТРИЦА СМЕЖНОСТИ, ТРУДОЕМКОСТЬ РОСТА ФУНКЦИИ, ТЕСТИРОВАНИЕ ПРОГРАМ РЕАЛИЗАЦИИ АЛГОРИТМОВ
Предметом исследования является алгоритм нахождения минимального расстояния между всеми вершинами как ориентированного, так и не ориентированного графа.
Цель работы – разработка и реализация алгоритма Флойда и Беллмана-Форда для поиска кратчайшего пути между всеми вершинами графа. А также анализ трудоемкости роста функции, тестирование правильности и анализ по времени алгоритма. Разработка псевдокода и блок-схемы для обоих алгоритмов.
В ходе работы была разработана программа, блок-схема и псевдокод для поиска кратчайшего пути между всеми вершинами графа с помощью алгоритма Флойда и переработанного алгоритма Беллмана-Форда. А так же проводились тестирования программы на правильность и время работы. Помимо тестов проводился анализ трудоемкости роста функции и результатов тестов. Разработки проводились в среде (программе) Microsoft Visual Studio.
Содержание
Введение 4
1 Разработка блок-схемы алгоритмов 5
2 Разработка псевдокода алгоритмов 7
3 Анализ трудоемкости роста функции 8
4 Программа реализации алгоритмов 9
5 Тестирование программ реализации алгоритмов 10
5.1 Тестирование правильности 10
5.2 Анализ по времени 12
6 Анализ результатов 12
Заключение 13
Список использованных источников 14
Приложение А Код программы по алгоритму Флойда 15
Приложение Б Код программы по алгоритму Беллмана-Форда 17
Введение
Алгоритм Флойда поиска кратчайших путей между всеми парами вершин.
Граф — это совокупность множества вершин и множества пар вершин (связей между вершинами, дуг).
Алгоритм Флойда — Уоршелла — алгоритм для нахождения кратчайших расстояний между всеми вершинами взвешенного графа без циклов с отрицательными весами с использованием метода динамического программирования.
Этот алгоритм был одновременно опубликован в статьях Роберта Флойда (Robert Floyd) и Стивена Уоршелла (Stephen Warshall) в 1962 г., хотя в 1959 г. Бернард Рой (Bernard Roy) опубликовал практически такой же алгоритм, но это осталось незамеченным.
Алгоритм Флойда делает N итераций, после i-й итерации матрица А будет содержать длины кратчайших путей между любыми двумя парами вершин при условии, что эти пути проходят через вершины от первой до i-й. На каждой итерации перебираются все пары вершин и путь между ними сокращается при помощи i-й вершины. Перед работой алгоритма матрица А заполняется длинами рёбер графа.
Как и любой базовый алгоритм, алгоритм Флойда — Уоршелла используется очень широко, начиная от поиска транзитивного замыкания графа, заканчивая генетикой и управлением проектами. Но первое что приходит в голову конечно же транспортные сети.
Например, если вы возьмете карту города — её транспортная система это граф, соответственно присвоив каждому ребру некую стоимость, рассчитанную скажем из пропускной способности и других важный параметров — вы сможете подвести попутчика по самому короткому, быстрому, дешевому пути.
Если граф не содержит рёбер с отрицательным весом, то можно использовать алгоритм Дейкстры для нахождения кратчайшего пути от одной вершины до всех остальных, запустив его на каждой вершине.
Алгоритм Беллмана-Форда — алгоритм поиска кратчайшего пути во взвешенном графе. Алгоритм находит кратчайшие пути от одной вершины графа до всех остальных. В отличие от алгоритма Дейкстры, алгоритм Беллмана-Форда допускает рёбра с отрицательным весом. Этот алгоритм предложен независимо Ричардом Беллманом и Лестером Фордом и впервые разработан в 1969 году.
Для
заданного взвешенного графа G
= (V,
E) алгоритм
находит кратчайшие пути из заданной
вершины
до
всех остальных вершин. В, случае, когда
в графе
содержатся
отрицательные циклы, достижимые из
,
алгоритм сообщает, что кратчайших путей
не существует.