МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра информационная безопасности
отчет
по лабораторной работе №5
по дисциплине «Алгоритмы и структуры данных»
Тема: Нахождение кратчайшего пути в графе
Студенты гр. 1363 |
|
Афанасьев Д.К. Владимиров П.А. |
Преподаватель |
|
Беляев А.В. |
Санкт-Петербург
2022
Цель работы: ознакомление с вариантами реализации алгоритмов на графах на примере задачи поиска кратчайшего пути в неориентированном графе.
Теоретические положения
Алгоритм Беллмана-Форда:
Алгоритм использует метод динамического программирования и формирует решение в виде квадратной матрицы, количество строк и столбцов которой равно количеству вершин графа. Ячейка на пересечении строки “m” и столбца “n” после окончания расчета содержит длину кратчайшего путь от заданной вершины до вершины «m», при условии, что он (путь) содержит не более «n» ребер (считая номера столбцов с «0»).
Матрица заполняется по столбцам слева направо. Начальное заполнение содержит нулевой столбец, где для строки заданной (исходной) вершины установлено значение «0», а для всех остальных строк – значение «∞» (на практике используется достаточно большая по величине константа).
Алгоритм Дейкстры:
Алгоритм последовательно анализирует («обрабатывает») все вершины графа, начиная от заданной (исходной) следующим образом.
Изначально всем вершинам, кроме исходной, присваивается оценка длины кратчайшего пути, равная «∞», (исходной вершине присваивается оценка «0»). Все вершины считаются «необработанными».
В каждой итерации цикла среди необработанных вершин выбирается одна, имеющая наименьшую на текущий момент оценку кратчайшего пути от заданной (исходной). Анализируются все ребра, исходящие от нее в сторону необработанных вершин, и если какое-либо из ребер улучшает (уменьшает) текущую оценку, то эта оценка обновляется.
Теоретическая часть
Владимиров Петр (5 вариант)
AB |
AD |
AE |
BC |
BF |
CD |
CG |
DH |
EF |
EH |
FG |
GH |
18 |
17 |
2 |
12 |
28 |
14 |
10 |
6 |
23 |
11 |
19 |
5 |
Алгоритм Беллмана-Форда
Запишем ребра в следующем порядке: AB, AD, AE, BC, BF, CD, CG, DH, EF, EH, FG, GH.
A |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
– |
B |
∞ |
18 |
18 |
18 |
18 |
18 |
18 |
18 |
A-B |
C |
∞ |
∞ |
∞ |
∞ |
28 |
28 |
28 |
28 |
A-E-H-G-C |
D |
∞ |
17 |
17 |
17 |
17 |
17 |
17 |
17 |
A-D |
E |
∞ |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
A-E |
F |
∞ |
∞ |
25 |
25 |
25 |
25 |
25 |
25 |
A-E-F |
G |
∞ |
∞ |
∞ |
18 |
18 |
18 |
18 |
18 |
A-E-H-G |
H |
∞ |
∞ |
13 |
13 |
13 |
13 |
13 |
13 |
A-E-H |
Алгоритм Дейкстры
Итерация |
S |
V |
D[B] |
D[C] |
D[D] |
D[E] |
D[F] |
D[G] |
D[H] |
Начало |
{A} |
- |
18 |
∞ |
17,A |
2,A |
∞ |
∞ |
∞ |
1 |
{A,E} |
E |
18,A |
∞ |
|
|
25,E |
∞ |
13,E |
2 |
{A,E,H} |
H |
18,A |
∞ |
|
|
|
∞ |
|
3 |
{A,E,H,G} |
G |
|
∞ |
|
|
|
18,H |
|
4 |
{A,E,H,G,C} |
C |
|
28,G |
|
|
|
|
|
5 |
{A,E,H,G,C,B} |
B |
|
|
|
|
|
|
|
6 |
{A,E,H,G,C,B,D} |
D |
|
|
|
|
|
|
|
На 1 итерации обновляем значение пути для вершины B, D, E. На 2 итерации обновляем вершины F, H. На 3 итерации – вершину G. На 4 – C.
Вывод: используя разные алгоритмы построения кратчайшего пути до вершин, результаты работы алгоритмов получились идентичными.