<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://discopal.ispras.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A4%D0%BB%D0%BE%D0%B9%D0%B4%D0%B0-%D0%A3%D0%BE%D1%80%D1%88%D0%BE%D0%BB%D0%BB%D0%B0</id>
		<title>Алгоритм Флойда-Уоршолла - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://discopal.ispras.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A4%D0%BB%D0%BE%D0%B9%D0%B4%D0%B0-%D0%A3%D0%BE%D1%80%D1%88%D0%BE%D0%BB%D0%BB%D0%B0"/>
		<link rel="alternate" type="text/html" href="https://discopal.ispras.ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A4%D0%BB%D0%BE%D0%B9%D0%B4%D0%B0-%D0%A3%D0%BE%D1%80%D1%88%D0%BE%D0%BB%D0%BB%D0%B0&amp;action=history"/>
		<updated>2026-05-03T03:33:55Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://discopal.ispras.ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A4%D0%BB%D0%BE%D0%B9%D0%B4%D0%B0-%D0%A3%D0%BE%D1%80%D1%88%D0%BE%D0%BB%D0%BB%D0%B0&amp;diff=876&amp;oldid=prev</id>
		<title>VitaliyFilippov: 1 версия</title>
		<link rel="alternate" type="text/html" href="https://discopal.ispras.ru/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%A4%D0%BB%D0%BE%D0%B9%D0%B4%D0%B0-%D0%A3%D0%BE%D1%80%D1%88%D0%BE%D0%BB%D0%BB%D0%B0&amp;diff=876&amp;oldid=prev"/>
				<updated>2009-03-27T10:04:42Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Алгоритм Флойда-Уоршолла (Floyd-Warshall) предназначен для решения задачи &lt;br /&gt;
[[Поиск кратчайших путей в графе]]. В отличие от [[алгоритм Дейкстры|алгоритма Дейкстры]], он находит все кратчайшие пути в графе, к тому же, допускает наличие отрицательных весов (расстояний) на ребрах графа, при условии, что в графе не образуется циклов отрицательной длины (т. е. невозможно бесконечно уменьшать расстояние между некоторыми пунктами).&lt;br /&gt;
&lt;br /&gt;
В этом алгоритме, для графа &amp;lt;m&amp;gt;G=(V,E)&amp;lt;/m&amp;gt; последовательно выполняются &amp;lt;m&amp;gt;n=|V|&amp;lt;/m&amp;gt; итераций, улучшая матрицу &amp;lt;m&amp;gt;D_{ij}&amp;lt;/m&amp;gt; минимальных стоимостей пути из вершины ''i'' в вершину ''j'', с возможным использованием (для ''k''-той итерации) промежуточных вершин из множества &amp;lt;m&amp;gt;1,\dots,k&amp;lt;/m&amp;gt;. Вычислять эту матрицу очень легко, изначально она определяется весовой функцией ребер, &amp;lt;m&amp;gt;D^0_{ij}=w_{ij}&amp;lt;/m&amp;gt;, для тех ''i'' и ''j'', для которых есть ребро ''(i,j)'', и &amp;lt;m&amp;gt;+\infty&amp;lt;/m&amp;gt; для остальных.&lt;br /&gt;
Обновление этой матрицы на ''k''-той итерации происходит по очевидной формуле:&lt;br /&gt;
&amp;lt;m&amp;gt;D^k_{ij}=min(D^{k-1}_{ij},D^{k-1}_{ik}+D^{k-1}_{kj})&amp;lt;/m&amp;gt;, где &amp;lt;m&amp;gt;D^{k-1}&amp;lt;/m&amp;gt; — значение этой матрицы на предыдущей итерации.&lt;br /&gt;
Таким образом, очевидна и корректность алгоритма, и его сложность, состовляющая &amp;lt;m&amp;gt;O(n^3)&amp;lt;/m&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
def floyd_warshal(D):&lt;br /&gt;
    N=D.shape[0]  &lt;br /&gt;
    print_frame(D)                &lt;br /&gt;
    for k in xrange(N):&lt;br /&gt;
        #Сохраняем $D_{k-1}$ в $D_{old}$&lt;br /&gt;
        D_old=array(D)              &lt;br /&gt;
        for v1 in xrange(N):&lt;br /&gt;
            for v2 in xrange (N):&lt;br /&gt;
                D[v1,v2]=min( D[v1,v2], D_old[v1,k]+D_old[k,v2] )    &lt;br /&gt;
        print_frame(D,D_old,k)                &lt;br /&gt;
    return D&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Трассировка алгоритма==&lt;br /&gt;
&lt;br /&gt;
===Входной граф===&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{ rankdir=LR; &lt;br /&gt;
   node[fontsize=16];&lt;br /&gt;
   edge[fontcolor=blue,style=dashed];&lt;br /&gt;
 0 [label=&amp;quot;NY(0)&amp;quot;];&lt;br /&gt;
 1 [label=&amp;quot;Moscow(1)&amp;quot;];&lt;br /&gt;
 2 [label=&amp;quot;Minsk(2)&amp;quot;];&lt;br /&gt;
 3 [label=&amp;quot;Berlin(3)&amp;quot;];&lt;br /&gt;
 4 [label=&amp;quot;Kiev(4)&amp;quot;];&lt;br /&gt;
 0 -&amp;gt; 4[label=&amp;quot;$80&amp;quot;]; &lt;br /&gt;
 1 -&amp;gt; 0[label=&amp;quot;$60&amp;quot;]; &lt;br /&gt;
 3 -&amp;gt; 0[label=&amp;quot;$50&amp;quot;]; &lt;br /&gt;
 1 -&amp;gt; 2[label=&amp;quot;$-5&amp;quot;]; &lt;br /&gt;
 1 -&amp;gt; 3[label=&amp;quot;$50&amp;quot;]; &lt;br /&gt;
 1 -&amp;gt; 4[label=&amp;quot;$10&amp;quot;]; &lt;br /&gt;
 2 -&amp;gt; 1[label=&amp;quot;$10&amp;quot;]; &lt;br /&gt;
 3 -&amp;gt; 1[label=&amp;quot;$30&amp;quot;]; &lt;br /&gt;
 4 -&amp;gt; 1[label=&amp;quot;$15&amp;quot;]; &lt;br /&gt;
 3 -&amp;gt; 2[label=&amp;quot;$20&amp;quot;]; &lt;br /&gt;
 4 -&amp;gt; 2[label=&amp;quot;$15&amp;quot;]; &lt;br /&gt;
 3 -&amp;gt; 4[label=&amp;quot;$30&amp;quot;]; &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Итерация 1===&lt;br /&gt;
&amp;lt;latex&amp;gt;&lt;br /&gt;
\begin{tabular}{|p{.18\textwidth}|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|}&lt;br /&gt;
\hline&lt;br /&gt;
       &amp;amp; NY &amp;amp; Moscow &amp;amp; Minsk &amp;amp; Berlin &amp;amp; Kiev \\ \hline &lt;br /&gt;
 NY  &amp;amp; \hfill 0  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 80  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Moscow  &amp;amp; \hfill 60  &amp;amp; \hfill 0  &amp;amp; \hfill -5  &amp;amp; \hfill 50  &amp;amp; \hfill 10  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Minsk  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 10  &amp;amp; \hfill 0  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Berlin  &amp;amp; \hfill 50  &amp;amp; \hfill 30  &amp;amp; \hfill 20  &amp;amp; \hfill 0  &amp;amp; \hfill 30  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Kiev  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 15  &amp;amp; \hfill 15  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 0  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
\end{tabular}&lt;br /&gt;
&amp;lt;/latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Итерация 2===&lt;br /&gt;
&amp;lt;latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\begin{tabular}{|p{.18\textwidth}|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|}&lt;br /&gt;
\hline&lt;br /&gt;
     k=0 &lt;br /&gt;
 (NY)  &amp;amp; NY &amp;amp; Moscow &amp;amp; Minsk &amp;amp; Berlin &amp;amp; Kiev \\ \hline &lt;br /&gt;
 NY  &amp;amp; \hfill 0  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 80  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Moscow  &amp;amp; \hfill 60  &amp;amp; \hfill 0  &amp;amp; \hfill -5  &amp;amp; \hfill 50  &amp;amp; \hfill 10  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Minsk  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 10  &amp;amp; \hfill 0  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Berlin  &amp;amp; \hfill 50  &amp;amp; \hfill 30  &amp;amp; \hfill 20  &amp;amp; \hfill 0  &amp;amp; \hfill 30  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Kiev  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 15  &amp;amp; \hfill 15  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 0  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
\end{tabular}&lt;br /&gt;
&amp;lt;/latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Итерация 3===&lt;br /&gt;
&amp;lt;latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\begin{tabular}{|p{.18\textwidth}|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|}&lt;br /&gt;
\hline&lt;br /&gt;
     k=1 &lt;br /&gt;
 (Moscow)  &amp;amp; NY &amp;amp; Moscow &amp;amp; Minsk &amp;amp; Berlin &amp;amp; Kiev \\ \hline &lt;br /&gt;
 NY  &amp;amp; \hfill 0  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 80  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Moscow  &amp;amp; \hfill 60  &amp;amp; \hfill 0  &amp;amp; \hfill -5  &amp;amp; \hfill 50  &amp;amp; \hfill 10  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Minsk  &amp;amp; \hfill \textcolor{red}{$\infty$}$\Rightarrow$\textbf{70 } &amp;amp; \hfill 10  &amp;amp; \hfill 0  &amp;amp; \hfill \textcolor{red}{$\infty$}$\Rightarrow$\textbf{60 } &amp;amp; \hfill \textcolor{red}{$\infty$}$\Rightarrow$\textbf{20 } \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Berlin  &amp;amp; \hfill 50  &amp;amp; \hfill 30  &amp;amp; \hfill 20  &amp;amp; \hfill 0  &amp;amp; \hfill 30  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Kiev  &amp;amp; \hfill \textcolor{red}{$\infty$}$\Rightarrow$\textbf{75 } &amp;amp; \hfill 15  &amp;amp; \hfill \textcolor{red}{15}$\Rightarrow$\textbf{10 } &amp;amp; \hfill \textcolor{red}{$\infty$}$\Rightarrow$\textbf{65 } &amp;amp; \hfill 0  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
\end{tabular}&lt;br /&gt;
&amp;lt;/latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Итерация 4===&lt;br /&gt;
&amp;lt;latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\begin{tabular}{|p{.18\textwidth}|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|}&lt;br /&gt;
\hline&lt;br /&gt;
     k=2 &lt;br /&gt;
 (Minsk)  &amp;amp; NY &amp;amp; Moscow &amp;amp; Minsk &amp;amp; Berlin &amp;amp; Kiev \\ \hline &lt;br /&gt;
 NY  &amp;amp; \hfill 0  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 80  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Moscow  &amp;amp; \hfill 60  &amp;amp; \hfill 0  &amp;amp; \hfill -5  &amp;amp; \hfill 50  &amp;amp; \hfill 10  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Minsk  &amp;amp; \hfill 70  &amp;amp; \hfill 10  &amp;amp; \hfill 0  &amp;amp; \hfill 60  &amp;amp; \hfill 20  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Berlin  &amp;amp; \hfill 50  &amp;amp; \hfill 30  &amp;amp; \hfill 20  &amp;amp; \hfill 0  &amp;amp; \hfill 30  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Kiev  &amp;amp; \hfill 75  &amp;amp; \hfill 15  &amp;amp; \hfill 10  &amp;amp; \hfill 65  &amp;amp; \hfill 0  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
\end{tabular}&lt;br /&gt;
&amp;lt;/latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Итерация 5===&lt;br /&gt;
&amp;lt;latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
\begin{tabular}{|p{.18\textwidth}|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|}&lt;br /&gt;
\hline&lt;br /&gt;
     k=3 &lt;br /&gt;
 (Berlin)  &amp;amp; NY &amp;amp; Moscow &amp;amp; Minsk &amp;amp; Berlin &amp;amp; Kiev \\ \hline &lt;br /&gt;
 NY  &amp;amp; \hfill 0  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill $\infty$  &amp;amp; \hfill 80  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Moscow  &amp;amp; \hfill 60  &amp;amp; \hfill 0  &amp;amp; \hfill -5  &amp;amp; \hfill 50  &amp;amp; \hfill 10  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Minsk  &amp;amp; \hfill 70  &amp;amp; \hfill 10  &amp;amp; \hfill 0  &amp;amp; \hfill 60  &amp;amp; \hfill 20  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Berlin  &amp;amp; \hfill 50  &amp;amp; \hfill 30  &amp;amp; \hfill 20  &amp;amp; \hfill 0  &amp;amp; \hfill 30  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Kiev  &amp;amp; \hfill 75  &amp;amp; \hfill 15  &amp;amp; \hfill 10  &amp;amp; \hfill 65  &amp;amp; \hfill 0  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
\end{tabular}&lt;br /&gt;
&amp;lt;/latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Итерация 6===&lt;br /&gt;
&amp;lt;latex&amp;gt;&lt;br /&gt;
\begin{tabular}{|p{.18\textwidth}|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|p{.14\textwidth}|r|}&lt;br /&gt;
\hline&lt;br /&gt;
     k=4 &lt;br /&gt;
 (Kiev)  &amp;amp; NY &amp;amp; Moscow &amp;amp; Minsk &amp;amp; Berlin &amp;amp; Kiev \\ \hline &lt;br /&gt;
 NY  &amp;amp; \hfill 0  &amp;amp; \hfill \textcolor{red}{$\infty$}$\Rightarrow$\textbf{95 } &amp;amp; \hfill \textcolor{red}{$\infty$}$\Rightarrow$\textbf{90 } &amp;amp; \hfill \textcolor{red}{$\infty$}$\Rightarrow$\textbf{145 } &amp;amp; \hfill 80  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Moscow  &amp;amp; \hfill 60  &amp;amp; \hfill 0  &amp;amp; \hfill -5  &amp;amp; \hfill 50  &amp;amp; \hfill 10  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Minsk  &amp;amp; \hfill 70  &amp;amp; \hfill 10  &amp;amp; \hfill 0  &amp;amp; \hfill 60  &amp;amp; \hfill 20  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Berlin  &amp;amp; \hfill 50  &amp;amp; \hfill 30  &amp;amp; \hfill 20  &amp;amp; \hfill 0  &amp;amp; \hfill 30  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
 Kiev  &amp;amp; \hfill 75  &amp;amp; \hfill 15  &amp;amp; \hfill 10  &amp;amp; \hfill 65  &amp;amp; \hfill 0  \\ &lt;br /&gt;
 \hline &lt;br /&gt;
\end{tabular}&lt;br /&gt;
&amp;lt;/latex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Алгоритмы|Ф]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>VitaliyFilippov</name></author>	</entry>

	</feed>