Алгоритм Дейкстры — различия между версиями
|  (Новая страница: «{{В разработке}}  == Алгоритм == В ориентированном взвешанном графе <tex>G = (V, E)</tex>, вес рёбер кот…») | |||
| Строка 1: | Строка 1: | ||
| {{В разработке}} | {{В разработке}} | ||
| + | |||
| + | В ориентированном взвешанном графе <tex>G = (V, E)</tex>, вес рёбер которого неотрицателен и определяется весовой функцией <tex>w(uv) \geqslant 0</tex>, Алгоритм Дейкстры находит длину кратчайшего пути из одной вершины <tex>s</tex> до всех остальных. | ||
| == Алгоритм == | == Алгоритм == | ||
| − | В  | + | В алгоритме поддерживается множество вершин <tex>S</tex>, для которых уже вычислены кратчайшие пути к ним из вершины <tex>s</tex>. На каждой итерации основного цикла выбирается вершина <tex> u \in V \setminus S</tex>, которой на текущий момент соответствует минимальная оценка  кратчайшего пути. Вершина <tex>u</tex> добавляется в множество <tex>S</tex> и производится релаксация всех исходящих из неё рёбер. | 
| + | |||
| == Псевдокод == | == Псевдокод == | ||
|   '''Dijkstra'''(<tex>G</tex>, <tex>w</tex>, <tex>s</tex>) |   '''Dijkstra'''(<tex>G</tex>, <tex>w</tex>, <tex>s</tex>) | ||
| − | + |    <tex>d \gets \infty</tex> | |
| − | + |    <tex>d[s] \gets 0</tex> | |
| − | + |    <tex>S \gets \emptyset</tex> | |
| − | + |    '''while''' <tex>V \setminus S \neq \emptyset</tex> | |
| − | + |        '''do''' ''argmin''(<tex>v : v \in V \setminus S, d[v]</tex>) | |
| − | + |           <tex>S \gets S \cup \{u\}</tex> | |
| − | + |           '''for''' <tex>(uv) \in E</tex> | |
| − | + |               '''do''' ''relax''(<tex>u</tex>, <tex>v</tex>, <tex>w</tex>) | |
| − | + | ||
| == Обоснование корректности работы == | == Обоснование корректности работы == | ||
| + | {{Теорема | ||
| + | |statement=После окончания работы алгоритма Дейкстры для всех вершин <tex>u \in V(G)</tex> будет выполняться равенство <tex>d[u] = \delta(s, u)</tex> | ||
| + | |proof= | ||
| + | Рассмотрим инвариант основного цикла: в начале каждой итерации для всех вершин <tex>v \in S</tex> выполняется <tex>d[v] = \delta(s, u)</tex> | ||
| + | |||
| + | '''Инициализация'''. Изначально множество <tex>S</tex> пусто, инвариант выполняется. | ||
| + | |||
| + | '''Сохранение'''.  | ||
| + | }} | ||
| + | |||
| == Оценка сложности == | == Оценка сложности == | ||
| − | ==  | + | == Литература == | 
| * ''Кормен Т. Х., Лейзерсон Ч. И., Ривест Р. Л., Штайн К.'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.) | * ''Кормен Т. Х., Лейзерсон Ч. И., Ривест Р. Л., Штайн К.'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.) | ||
| [[Категория: Алгоритмы и структуры данных]] | [[Категория: Алгоритмы и структуры данных]] | ||
| [[Категория: Кратчайшие пути в графах ]] | [[Категория: Кратчайшие пути в графах ]] | ||
Версия 07:29, 6 декабря 2010
Эта статья находится в разработке!
В ориентированном взвешанном графе , вес рёбер которого неотрицателен и определяется весовой функцией , Алгоритм Дейкстры находит длину кратчайшего пути из одной вершины до всех остальных.
Алгоритм
В алгоритме поддерживается множество вершин , для которых уже вычислены кратчайшие пути к ним из вершины . На каждой итерации основного цикла выбирается вершина , которой на текущий момент соответствует минимальная оценка кратчайшего пути. Вершина добавляется в множество и производится релаксация всех исходящих из неё рёбер.
Псевдокод
Dijkstra(, , ) while do argmin() for do relax(, , )
Обоснование корректности работы
| Теорема: | 
| После окончания работы алгоритма Дейкстры для всех вершин  будет выполняться равенство  | 
| Доказательство: | 
| Рассмотрим инвариант основного цикла: в начале каждой итерации для всех вершин выполняется Инициализация. Изначально множество пусто, инвариант выполняется.Сохранение. | 
Оценка сложности
Литература
- Кормен Т. Х., Лейзерсон Ч. И., Ривест Р. Л., Штайн К. Алгоритмы: построение и анализ, 2-е издание. Пер. с англ. — М.:Издательский дом "Вильямс", 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)
