Алгоритм Дейкстры
Версия от 08:43, 6 декабря 2010; Vladimir.nesmelov (обсуждение | вклад) (Добавлена часть доказательства)
Эта статья находится в разработке!
В ориентированном взвешанном графе
, вес рёбер которого неотрицателен и определяется весовой функцией , Алгоритм Дейкстры находит длину кратчайшего пути из одной вершины до всех остальных.Алгоритм
В алгоритме поддерживается множество вершин
, для которых уже вычислены кратчайшие пути к ним из вершины . На каждой итерации основного цикла выбирается вершина , которой на текущий момент соответствует минимальная оценка кратчайшего пути. Вершина добавляется в множество и производится релаксация всех исходящих из неё рёбер.Псевдокод
Dijkstra(, , ) while do argmin( ) for do relax( , , )
Обоснование корректности работы
Теорема: |
После окончания работы алгоритма Дейкстры для всех вершин будет выполняться равенство |
Доказательство: |
Рассмотрим инвариант основного цикла: в начале каждой итерации для всех вершин выполняетсяИнициализация. Изначально множество Сохранение. Покажем, что при каждой итерации инвариант сохраняется для каждой вершины, добавленной в пусто, инвариант выполняется. , для этого воспользуемся методом «от противного». Предположим, что первая добавленная в вершина, для которой равенство не выполняется. Рассмотрим ситуацию, сложившуюся в начале итерации, в которой будет добавлена в . Рассмотрев кратчайший путь из в , можно получить противоречие, заключающееся в том, что на рассматриваемый момент справедливо равенство . Должно выполняться условие , так как является первой вершиной, добавленной в и в момент её добавления равенство выполняется. Из условия следует, в частности, что не пусто. Из вершины в вершину должен существовать какой-нибудь путь, так как иначе выполняется соотношение , нарушающее предположение о том, что равенство не выполняется. Из существования пути следует, что существует и кратчайший путь из в . Перед добавлением в путь соединяет вершину из множества с вершиноу принадлежащей маножеству . Рассмотрим первую вершину на пути принадлежащую , и положим, что её предшествует вершина . Тогда, как видно из рис.1, путь можно разложить на составляющие . |
Оценка сложности
Литература
- Кормен Т. Х., Лейзерсон Ч. И., Ривест Р. Л., Штайн К. Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)