2.4.1. Алгоритм Дийкстры
Рассматриваемый здесь алгоритм предназначен для поиска кратчайших путей из заданного узла sв каждый из остальных узлов в случаеaij0и основан на так называемом «методе пометок». Каждый узел графаiимеет меткуd(i), которая на каждой итерации алгоритма представляет собой длину кратчайшего найденного пути в узелi. Поэтому перед началом работы алгоритмаd(s)=0, d(i)= приis. Еще одна меткаl(i)вводится для того, чтобы по окончании работы алгоритма было возможно вычислить последовательность вершин, образующих каждый из кратчайших путей.
Пусть d(i) - метка узла,S– множество вершин.
Шаг 1. Положить d(s)=0, d(i)= приis,l(i)=0,S=
Шаг 2. Если в Sвходят все вершины графа, то СТОП: длины кратчайших путей найдены.
Шаг 3. Если для всех iSd(i)= ,то СТОП: не существует путей в вершины, не входящие вS. Иначе среди вершинiSнайти вершинуnс минимальной меткой.
Шаг 4. Включить вершину nв множествоS, для всехkSвычислитьd(k)=min{d(k),d(n)+ank}. Если при этом значениеd(k)изменяется, тоl(k) положить равнымn. Перейти к шагу 2.
Пример 1.
В этом алгоритме последовательно просматриваются все вершины графа, причем каждый раз выбирается вершина с минимальной меткой из еще не просмотренных (при первой итерации будет выбрана вершина s), и затем для соседних с ней вершин вычисляются новые значения меток как минимальные из двух чисел: прежняя метка и длина вновь найденного пути через рассматриваемую вершину.
Легко видеть, что в случае aij0 минимальная метка для непросмотренных вершин уже не может быть уменьшена в дальнейшем и является длиной кратчайшего пути в эту вершину. После выполнения алгоритма с помощью метокl(i) могут быть найдены кратчайшие пути. Так, для пути изsвtпоследней будет вершинаt, предпоследней –l(t),перед ней –l(l(t)), и так далее, доs. Все такие пути образуют дерево кратчайших путей из вершиныs.
Рис. 2.7
Пример 2. Задача о покупке автомобиля. При решении вопроса о том, через какое время следует производить покупку нового автомобиля, необходимо учитывать его стоимость и возрастающие эксплуатационные расходы. Рассматривается восьмилетний период времени. Предполагается, что решение о покупке нового автомобиля может приниматься в начале каждого года, исходя из затрат на его приобретение, эксплуатационных расходов на период, в течение которого автомобиль будет использоваться, и ликвидационной стоимостимашины в момент, когда она заменяется на новую. Предположим, что в начальный момент человек не имеет автомобиля, и что он собирается покупать новый автомобиль по крайней мере каждые 4 года.
Сеть для рассматриваемой задачи содержит 9 вершин (рис.2.7). Если в начале i-го года производится покупка автомобиля, а в началеj-го года автомобиль заменяется на новый, то данному варианту замены соответствует дуга(i,j).
Длина дугиaij(в данном случае – стоимость) вычисляется по формуле гдеPi– стоимость автомобиля в началеi-го года,mk– эксплуатационные расходы в течениеk-го года,Sj– ликвидационная стоимость автомобиля в началеj-го года. Оптимальному решению соответствует кратчайший путь из вершины 1 в вершину 9. В таблице приведены результаты вычислений по алгоритму Дийкстры метокd(i). Просмотренные узлы выделены.
Итерация | Вершина | ||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
0 | 0 | | | | | | | | |
1 | 0 | 1450 | 2750 | 3850 | 4750 | | | | |
2 | 0 | 1450 | 2750 | 3850 | 4750 | 6900 | | | |
3 | 0 | 1450 | 2750 | 3850 | 4750 | 6900 | 8550 | | |
4 | 0 | 1450 | 2750 | 3850 | 4750 | 6900 | 8550 | 10000 | |
5 | 0 | 1450 | 2750 | 3850 | 4750 | 6825 | 8550 | 10000 | 11250 |
6 | 0 | 1450 | 2750 | 3850 | 4750 | 6825 | 8550 | 10000 | 11250 |
7 | 0 | 1450 | 2750 | 3850 | 4750 | 6825 | 8550 | 10000 | 11250 |
8 | 0 | 1450 | 2750 | 3850 | 4750 | 6825 | 8550 | 10000 | 11250 |
9 | 0 | 1450 | 2750 | 3850 | 4750 | 6825 | 8550 | 10000 | 11250 |
Для минимизации общих затрат покупку автомобиля следует производить в начале первого, пятого и девятого годов. Затраты при этом составляют 11250$.
- Министерство образования Российской Федерации
- 1. Элементы теории графов.
- 1.1. Основные понятия теории графов
- 1.2. Способы задания графов
- 1.3. Связность графов
- 1.4. Изоморфизм графов
- 1.5. Планарные графы
- 1.6. Эйлеровы графы
- 1.7. Гамильтоновы графы
- 1.8. Деревья
- Контрольные вопросы
- 2. Задачи и алгоритмы
- 2.1. Алгоритмы поиска
- 2.2. Раскраска в графах
- 2.3. Алгоритмы построения деревьев
- 2.4. Алгоритмы поиска путей
- 2.4.1. Алгоритм Дийкстры
- 2.4.2. Алгоритм Форда
- 2.4.3. Алгоритм Флойда
- 2.5. Потоковые алгоритмы
- 2.5.1. Определения и постановки задач
- 2.5.2. Алгоритм поиска максимального потока
- 2.5.3. Алгоритм поиска потока минимальной стоимости
- 2.5.4. Динамический поток
- 2.5.5. Алгоритм дефекта
- Контрольные вопросы
- 3. Задачи для самостоятельного решения
- 4. Литература
- Содержание