Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсавой проект.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
342.78 Кб
Скачать

Реферат

Пояснительная записка 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)  алгоритм находит кратчайшие пути из заданной вершины   до всех остальных вершин. В, случае, когда в графе   содержатся отрицательные циклы, достижимые из  , алгоритм сообщает, что кратчайших путей не существует.