<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=109.188.219.147&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=109.188.219.147&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/109.188.219.147"/>
		<updated>2026-06-11T14:23:35Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B&amp;diff=18285</id>
		<title>Алгоритм Дейкстры</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B&amp;diff=18285"/>
				<updated>2012-02-25T20:55:58Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.219.147: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В [[Ориентированный граф|ориентированном]] взвешенном [[Основные определения: граф, ребро, вершина, степень, петля, путь, цикл|графе]] &amp;lt;tex&amp;gt;G = (V, E)&amp;lt;/tex&amp;gt;, вес [[Основные определения: граф, ребро, вершина, степень, петля, путь, цикл|рёбер]] которого неотрицателен и определяется весовой функцией &amp;lt;tex&amp;gt;w : E \rightarrow R&amp;lt;/tex&amp;gt;, алгоритм Дейкстры находит длины кратчайших [[Основные определения: граф, ребро, вершина, степень, петля, путь, цикл|путей]] из заданной [[Основные определения: граф, ребро, вершина, степень, петля, путь, цикл|вершины]] &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; до всех остальных.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
В алгоритме поддерживается множество вершин &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt;, для которых уже вычислены длины кратчайших путей до них из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. На каждой итерации основного цикла выбирается вершина &amp;lt;tex&amp;gt; u \notin U&amp;lt;/tex&amp;gt;, которой на текущий момент соответствует минимальная оценка  кратчайшего пути. Вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; добавляется в множество &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; и производится релаксация всех исходящих из неё рёбер.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;Для всех&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;u \in V&amp;lt;/tex&amp;gt;&lt;br /&gt;
:  &amp;lt;tex&amp;gt;d[u] \gets \infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;d[s] \gets 0\&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; U \gets \emptyset&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Пока&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;\exists v \notin U&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;Пусть&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;v \notin U : d[v]&amp;lt;/tex&amp;gt; &amp;lt;code&amp;gt; минимальный &amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;Для всех&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;u \notin U&amp;lt;/tex&amp;gt; &amp;lt;code&amp;gt;таких, что&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;vu \in E&amp;lt;/tex&amp;gt;&lt;br /&gt;
:: &amp;lt;code&amp;gt;если&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt; d[u] &amp;gt; d[v] + w(vu)&amp;lt;/tex&amp;gt; &amp;lt;code&amp;gt;то&amp;lt;/code&amp;gt;&lt;br /&gt;
:::  &amp;lt;tex&amp;gt;d[u] \gets d[v] + w (vu)&amp;lt;/tex&amp;gt;&lt;br /&gt;
:  &amp;lt;tex&amp;gt;U \gets v &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обоснование корректности ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;G = (V, E)&amp;lt;/tex&amp;gt; — ориентированный взвешенный граф, вес рёбер которого неотрицателен, &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; — стартовая вершина.&lt;br /&gt;
Тогда после выполнения алгоритма Дейкстры &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\rho(s, u)&amp;lt;/tex&amp;gt; — длина кратчайшего пути из вершины &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Докажем по индукции, что в момент посещения любой вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* На первом шаге выбирается &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, для нее выполнено: &amp;lt;tex&amp;gt;d(s) = \rho(s, s) = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Пусть для &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; первых шагов алгоритм сработал верно и на &amp;lt;tex&amp;gt;n + 1&amp;lt;/tex&amp;gt; шагу выбрана вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Докажем, что в этот момент &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt;. Для начала отметим, что для любой вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, всегда выполняется &amp;lt;tex&amp;gt;d(v) \ge \rho(s, v)&amp;lt;/tex&amp;gt; (алгоритм не может найти путь короче, чем кратчайший из всех существующих). Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — первая непосещённая вершина на &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; — предшествующая ей (следовательно, посещённая). Поскольку путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; кратчайший, его часть, ведущая из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; через &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, тоже кратчайшая, следовательно &amp;lt;tex&amp;gt;\rho(s, v) = \rho(s, z) + w(zv)&amp;lt;/tex&amp;gt;. По предположению индукции, в момент посещения вершины &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; выполнялось &amp;lt;tex&amp;gt;d(z) = \rho(s, z)&amp;lt;/tex&amp;gt;, следовательно, вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; тогда получила метку не больше чем &amp;lt;tex&amp;gt;d(z) + w(zv) = \rho(s, z) + w(zv) = \rho(s, v)&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;d(v) = \rho(s, v)&amp;lt;/tex&amp;gt;. С другой стороны, поскольку сейчас мы выбрали вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, её метка минимальна среди непосещённых, то есть &amp;lt;tex&amp;gt;d(u) \le d(v) = \rho(s, v) \le \rho(s, u)&amp;lt;/tex&amp;gt;, где второе неравенсто верно из-за ранее упомянутого определения вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в качестве первой непосещённой вершины на &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть вес пути до промежуточной вершины не превосходит веса пути до конечной вершины вследствие неотрицательности весовой функции. Комбинируя это с &amp;lt;tex&amp;gt;d(u) \ge \rho(s, u)&amp;lt;/tex&amp;gt;, имеем &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
&lt;br /&gt;
*Поскольку алгоритм заканчивает работу, когда все вершины посещены, в этот момент &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Основной цикл выполняется &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; раз. Релаксация выполниться всего &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; раз. В реализации алгоритма присутствует функция выбора вершины с минимальным значением &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, асимптотика её работы зависит от реализации.&lt;br /&gt;
&lt;br /&gt;
Таким образом:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align:center&amp;quot; width=30%&lt;br /&gt;
!style=&amp;quot;background:#f2f2f2&amp;quot;|Структура данных &lt;br /&gt;
!style=&amp;quot;background:#f2f2f2&amp;quot;|Время работы&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|Наивная реализация&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|&amp;lt;tex&amp;gt;O(V^2+E)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|[[Двоичная куча]]&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|&amp;lt;tex&amp;gt;O(E\log{V})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|[[Фибоначчиевы кучи|Фибоначчиева куча]]&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|&amp;lt;tex&amp;gt;O(V\log{V}+E)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. — М.:Издательский дом &amp;quot;Вильямс&amp;quot;, 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Алгоритм_Дейкстры Википедия — свободная энциклопедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Кратчайшие пути в графах ]]&lt;/div&gt;</summary>
		<author><name>109.188.219.147</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B&amp;diff=18283</id>
		<title>Алгоритм Дейкстры</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%94%D0%B5%D0%B9%D0%BA%D1%81%D1%82%D1%80%D1%8B&amp;diff=18283"/>
				<updated>2012-02-25T20:52:57Z</updated>
		
		<summary type="html">&lt;p&gt;109.188.219.147: /* Псевдокод */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В [[Ориентированный граф|ориентированном]] взвешенном [[Основные определения: граф, ребро, вершина, степень, петля, путь, цикл|графе]] &amp;lt;tex&amp;gt;G = (V, E)&amp;lt;/tex&amp;gt;, вес [[Основные определения: граф, ребро, вершина, степень, петля, путь, цикл|рёбер]] которого неотрицателен и определяется весовой функцией &amp;lt;tex&amp;gt;w : E \rightarrow R&amp;lt;/tex&amp;gt;, алгоритм Дейкстры находит длины кратчайших [[Основные определения: граф, ребро, вершина, степень, петля, путь, цикл|путей]] из заданной [[Основные определения: граф, ребро, вершина, степень, петля, путь, цикл|вершины]] &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; до всех остальных.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
В алгоритме поддерживается множество вершин &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt;, для которых уже вычислены длины кратчайших путей до них из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;. На каждой итерации основного цикла выбирается вершина &amp;lt;tex&amp;gt; u \notin U&amp;lt;/tex&amp;gt;, которой на текущий момент соответствует минимальная оценка  кратчайшего пути. Вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; добавляется в множество &amp;lt;tex&amp;gt;U&amp;lt;/tex&amp;gt; и производится релаксация всех исходящих из неё рёбер.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;Для всех&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;u \in V&amp;lt;/tex&amp;gt;&lt;br /&gt;
:  &amp;lt;tex&amp;gt;d[u] \gets \infty&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;d[s] \gets 0\&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt; U \gets \emptyset&amp;lt;/tex&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;Пока&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;\exists v \notin U&amp;lt;/tex&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;Пусть&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;v \notin U : d[v]&amp;lt;/tex&amp;gt; &amp;lt;code&amp;gt; минимальный &amp;lt;/code&amp;gt;&lt;br /&gt;
: &amp;lt;code&amp;gt;Для всех&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;u \notin U&amp;lt;/tex&amp;gt; &amp;lt;code&amp;gt;таких, что&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt;vu \in E&amp;lt;/tex&amp;gt;&lt;br /&gt;
:: &amp;lt;code&amp;gt;если&amp;lt;/code&amp;gt; &amp;lt;tex&amp;gt; d[u] &amp;gt; d[v] + w(vu)&amp;lt;/tex&amp;gt; &amp;lt;code&amp;gt;то&amp;lt;/code&amp;gt;&lt;br /&gt;
:::  &amp;lt;tex&amp;gt;d[u] \gets d[v] + w (vu)&amp;lt;/tex&amp;gt;&lt;br /&gt;
:  &amp;lt;tex&amp;gt;U \gets v &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Обоснование корректности ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;G = (V, E)&amp;lt;/tex&amp;gt; - ориентированный взвешенный граф, вес рёбер которого неотрицателен, &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; - стартовая вершина.&lt;br /&gt;
Тогда после выполнения алгоритма Дейкстры &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\rho(s, u)&amp;lt;/tex&amp;gt; — длина кратчайшего пути из вершины &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;&lt;br /&gt;
|proof=&lt;br /&gt;
Докажем по индукции, что в момент посещения любой вершины &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* На первом шаге выбирается &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt;, для нее выполнено: &amp;lt;tex&amp;gt;d(s) = \rho(s, s) = 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
* Пусть для &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; первых шагов алгоритм сработал верно и на &amp;lt;tex&amp;gt;n + 1&amp;lt;/tex&amp;gt; шагу выбрана вершина &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;. Докажем, что в этот момент &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt;. Для начала отметим, что для любой вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, всегда выполняется &amp;lt;tex&amp;gt;d(v) \ge \rho(s, v)&amp;lt;/tex&amp;gt; (алгоритм не может найти путь короче, чем кратчайший из всех существующих). Пусть &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; — кратчайший путь из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; — первая непосещённая вершина на &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; — предшествующая ей (следовательно, посещённая). Поскольку путь &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt; кратчайший, его часть, ведущая из &amp;lt;tex&amp;gt;s&amp;lt;/tex&amp;gt; через &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt;, тоже кратчайшая, следовательно &amp;lt;tex&amp;gt;\rho(s, v) = \rho(s, z) + w(zv)&amp;lt;/tex&amp;gt;. По предположению индукции, в момент посещения вершины &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; выполнялось &amp;lt;tex&amp;gt;d(z) = \rho(s, z)&amp;lt;/tex&amp;gt;, следовательно, вершина &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; тогда получила метку не больше чем &amp;lt;tex&amp;gt;d(z) + w(zv) = \rho(s, z) + w(zv) = \rho(s, v)&amp;lt;/tex&amp;gt;, следовательно, &amp;lt;tex&amp;gt;d(v) = \rho(s, v)&amp;lt;/tex&amp;gt;. С другой стороны, поскольку сейчас мы выбрали вершину &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;, её метка минимальна среди непосещённых, то есть &amp;lt;tex&amp;gt;d(u) \le d(v) = \rho(s, v) \le \rho(s, u)&amp;lt;/tex&amp;gt;, где второе неравенсто верно из-за ранее упомянутого определения вершины &amp;lt;tex&amp;gt;v&amp;lt;/tex&amp;gt; в качестве первой непосещённой вершины на &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;, то есть вес пути до промежуточной вершины не превосходит веса пути до конечной вершины вследствие неотрицательности весовой функции. Комбинируя это с &amp;lt;tex&amp;gt;d(u) \ge \rho(s, u)&amp;lt;/tex&amp;gt;, имеем &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt;, что и требовалось доказать.&lt;br /&gt;
&lt;br /&gt;
*Поскольку алгоритм заканчивает работу, когда все вершины посещены, в этот момент &amp;lt;tex&amp;gt;d(u) = \rho(s, u)&amp;lt;/tex&amp;gt; для всех &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Оценка сложности ==&lt;br /&gt;
Основной цикл выполняется &amp;lt;tex&amp;gt;V&amp;lt;/tex&amp;gt; раз. Релаксация выполниться всего &amp;lt;tex&amp;gt;E&amp;lt;/tex&amp;gt; раз. В реализации алгоритма присутствует функция выбора вершины с минимальным значением &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;, асимптотика её работы зависит от реализации.&lt;br /&gt;
&lt;br /&gt;
Таким образом:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;text-align:center&amp;quot; width=30%&lt;br /&gt;
!style=&amp;quot;background:#f2f2f2&amp;quot;|Структура данных &lt;br /&gt;
!style=&amp;quot;background:#f2f2f2&amp;quot;|Время работы&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|Наивная реализация&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|&amp;lt;tex&amp;gt;O(V^2+E)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|[[Двоичная куча]]&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|&amp;lt;tex&amp;gt;O(E\log{V})&amp;lt;/tex&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|[[Фибоначчиевы кучи|Фибоначчиева куча]]&lt;br /&gt;
|style=&amp;quot;background:#f9f9f9&amp;quot;|&amp;lt;tex&amp;gt;O(V\log{V}+E)&amp;lt;/tex&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Источники ==&lt;br /&gt;
* ''Кормен, Томас Х., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн Клиффорд'' '''Алгоритмы: построение и анализ''', 2-е издание. Пер. с англ. — М.:Издательский дом &amp;quot;Вильямс&amp;quot;, 2010. — 1296 с.: ил. — Парал. тит. англ. — ISBN 978-5-8459-0857-5 (рус.)&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Алгоритм_Дейкстры Википедия — свободная энциклопедия]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Кратчайшие пути в графах ]]&lt;/div&gt;</summary>
		<author><name>109.188.219.147</name></author>	</entry>

	</feed>