Материал: АиСД. Практикум (in dev)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Задача отыскания в графе (как ориентированном, так и неориентированном) кратчайшего пути имеет многочисленные практические приложения. С решением подобной задачи приходится встречаться в технике связи (например, при телефонизации населенных пунктов), на транспорте (при выборе оптимальных маршрутов доставки грузов), в микроэлектронике (при проектировании топологии микросхем) и т.д.

Путь между вершинами i и j графа считается кратчайшим, если вершины i и j соединены минимальным числом ребер (случай не взвешенного графа) или если сумма весов ребер, соединяющих вершины i и j, минимальна (для взвешенного графа).

В настоящее время известны десятки алгоритмов решения поставленной задачи.

Важным показателем алгоритма является его эффективность. Применительно к поставленной задаче эффективность алгоритма может зависеть в основном от двух параметров графа: число его вершин и число весов его ребер. В данной лабораторной работе для определения кратчайшего расстояния между вершинами графа исследуются два алгоритма: метод динамического программирования и метод Дейкстры.

    1. Метод динамического программирования.

Метод рассматривает многостадийные процессы принятия решения. При постановке задачи динамического программирования формируется некоторый критерий. Процесс разбивается на стадии (шаги), в которых принимаются решения, приводящие к достижению общей поставленной цели. Таким образом, метод динамического программирования - метод пошаговой оптимизации.

Введем функцию fi, определяющую минимальную длину пути из начальной в вершину i . Обозначим через Si j длину пути между вершинами i и j , а fj- наименьшую длину пути между вершиной j и начальной вершиной.

Выбирая в качестве i такую вершину, которая минимизирует сумму (Si j + fj) , получаем уравнение

fi = min {Si j + fj}

Трудность решения данного уравнения заключается в том, что неизвестная функция входит в обе части равенства. В такой ситуации приходится прибегать к классическому методу последовательных приближений( итераций), используя рекуррентную формулу:

fi(k+1) = min {Si j + fj(k)} ,

где fj(k) - k -е приближение функции.

Возможен другой подход к решению поставленной задачи с помощью метода стратегий. При движении из начальной точки i в конечную k получается приближение fi(0) = Sik, где Sik - длина пути между точками i и k. Следующее приближение – поиск решения в классе двухзвенных ломаных. Дальнейшие приближения ищутся в классе трехзвенных, четырехзвенных и других ломаных.

    1. Пример определения кратчайшего пути №1

Определить кратчайший путь из вершины 1 в вершину 10 для графа, представленного на рис. 1.

Рис.1. Взвешенный ориентированный граф

Начальные условия: f1 = 0, S11 = 0.

Находим последовательно значения функции fi (в условных единицах) для каждой вершины ориентированного графа:

f2 = min{S21 + f1} = {3 + f1} = {3 + 0} = 3;

f3 = min{S31 + f1} = {4 + f1} = {4 + 0} = 4;

f4 = min{S41 + f1} = {2 + f1} = {2 + 0} = 2;

S64 + f4 2 + 2

f6 = min S63 + f3 = min 6 + 4 = 4;

S62 + f2 3 + 3

S54 + f4 5 + 2

f5 = min = min = 5;

S56 + f6 1 + 4

S75 + f5 6 + 5

f7 = min = min = 11;

S55 + f6 8 + 4

f9 = min {S85 + f5} = min = {12 + 5} = 17;

S86 + f6 7 + 4

f8 = min S89 + f9 = min 6+17 = 11;

S10,7 + f4 4 + 11

f10 = min S10,8 + f8 = min 3 + 11 = 14.

S10,9 + f10 11 + 17

Длина кратчайшего пути составляет 14 условных единиц. Для выбора оптимальной траектории движения следует осуществить просмотр функций fi в обратном порядке, то есть с f10. Пусть fi = f10. В данном случае

4 + f1 4 + 11

f10 = min 3 + f8 = min 3 + 11 = 14.

11 + f9 11 + 17

Получаем, что (3 + f8) = 14, то есть fj = f8. Значит, из вершины 10 следует перейти к вершине 8. Имеем fi = f8. Рассмотрим функцию

7 + f6 7 + 4

f8 = min = min = 11,

6 + f9 6 + 17

то есть fj = f6 и т.д.

Таким образом, получаем кратчайший путь от вершины 1 к вершине 10:

(1, 4, 6, 8, 10)

Рассмотренный метод определения кратчайшего пути может быть распространен и на неориентированные графы.

    1. Пример нахождения кратчайшего пути при условии, что граф неориентированный№2

Для графа (рис. 1) найти кратчайший путь от вершины 1 до вершины 10, рассматривая граф как неориентированный. Матрица смежности весов графа в этом случае имеет вид:

1

2

3

4

5

6

7

8

9

10

1-

3

4

2

-

-

-

-

-

-

2

3

-

-

-

-

3

-

-

-

-

3

4

-

-

-

-

6

-

-

-

-

4

2

-

-

-

5

2

-

-

-

-

5

-

-

-

5

-

1

6

-

12

-

6

-

3

6

2

1

-

8

7

-

-

7

-

-

-

-

6

8

-

-

-

4

8

-

-

-

-

-

7

-

-

6

3

9

-

-

-

-

12

-

-

6

-

11

10

-

-

-

-

-

-

4

3

11

-

Источник: https://studfile.net/preview/12528130/