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