Алгоритм Левита — различия между версиями
Никита (обсуждение | вклад) (→См. также) |
Никита (обсуждение | вклад) (→Источники) |
||
| Строка 65: | Строка 65: | ||
== Источники == | == Источники == | ||
| + | * [http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%9B%D0%B5%D0%B2%D0%B8%D1%82%D0%B0: Алгоритм Левита - Википедия, свободная энциклопедия] | ||
| + | * [http://e-maxx.ru/algo/levit_algorithm: Алгоритм Левита - MAXimal::algo] | ||
| + | * И. В. Романовский, '''Дискретный анализ''', ISBN 5-7940-0138-0; 2008 г., стр. 228-234. | ||
Версия 14:27, 19 октября 2013
Алгоритм Левита находит расстояние от заданной вершины до всех остальных. Данный алгоритм является модификацией алгоритмы Дейкстры, которая позволяет работать с ребрами отрицательного веса.
Алгоритм
Пусть — текущая длина кратчайшего пути до вершины . Изначально, для всех ; .
Разделим вершины на три множества:
- — вершины, расстояние до которых уже вычислено(возможно, не окончательно)
- — вершины, расстояние до которых вычисляется. Это множество в свою очередь делится на два упорядоченных подмножества:
- — основная очередь
- — срочная очередь
- — вершины, расстояние до которых не вычисленно
Изначально все вершины, кроме помещаются в множество . Вершина помещается в множество .
Шаг алгоритма: выбирается вершина из . Если подмножество не пусто, то вершина берется из него, иначе из . Далее, для каждого ребра :
- если , то переводится в конец очереди . При этом
- если , то происходит релаксация ребра
- если и , то происходит релаксация ребра и помещается в
В конце шага помещаем вершину в множество .
Алгоритм заканчивает работу, когда множество становится пустым.
Псевдокод
for u V : .add(s) for u s V : .add(u) while : if : u .pop() else : u .pop() for uv E : if v : .push(v) relax(uv) if v : relax(uv) if v and : relax(uv) .push(v) .add(u)
Корректность
Сложность
См. также
Источники
- Алгоритм Левита - Википедия, свободная энциклопедия
- Алгоритм Левита - MAXimal::algo
- И. В. Романовский, Дискретный анализ, ISBN 5-7940-0138-0; 2008 г., стр. 228-234.