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