на стр 6, лекции 3, Очевидно "Ck <= модуль(Gk(е))*b(k+1)" (1) - , подскажите что значит "модуль" и почему это очевидно... |
Опубликован: 26.09.2006 | Уровень: специалист | Доступ: платный
Лекция 4:
Приоритетные очереди
Нахождение кратчайших путей в графе
Входные данные:
- Граф
со взвешенными ребрами (под весами можно понимать длины ребер, если речь идет о геометрическом графе, или любые другие числовые характеристики ребер). Пусть
— вес ребра (
).
- Стартовая вершина
(вершина, от которой вычисляются расстояния до всех остальных вершин).
Выходные данные:
- Массив
,
— кратчайшее расстояние от вершины
до вершины
).
- Массив
,
— предпоследняя вершина в кратчайшем пути из вершины
в вершину
).
Приводимый ниже алгоритм Дейкстры корректно решает задачу для графов с неотрицательными весами вершин. Если же в графе есть ребра с отрицательными весами, но нет циклов с отрицательным суммарным весом, то для решения задачи можно использовать алгоритм Форда, Беллмана.
Алгоритм Дейкстры
- Заполнить массив
нулями.
- Каждой вершине
приписать в качестве ключа
— максимально возможное число (оно должно быть больше, чем длина наибольшего из кратчайших путей в графе; в процессе вычислений это число будет уменьшаться и в итоге заменится на длину кратчайшего пути из вершины
в вершину
).
- Организовать приоритетную очередь из вершин графа, взяв
в качестве ключей величины
,
.
- Заменить ключ вершины
на 0.
- Пока очередь не пуста, выполнять операции
.
- Выбрать (с удалением) из приоритетной очереди
элемент
с минимальным ключом.
- Для каждой вершины
, смежной с
, выполнить операции
.
- Вычислить величину
.
- Если
, то уменьшить ключ
элемента
на величину
и заменить старое значение величины
на
.
Упражнение
Напишите на каком-либо алгоритмическом языке реализацию алгоритма Дейкстры
с использованием -кучи и испытайте ее на тестовых примерах при
различных значениях
.