<?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=188.162.64.36&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=188.162.64.36&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/188.162.64.36"/>
		<updated>2026-05-09T17:30:13Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D1%82%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D0%BE%D0%B2_%D0%94%D0%B6%D0%BE%D0%BD%D1%81%D0%BE%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=42142</id>
		<title>Использование потенциалов Джонсона при поиске потока минимальной стоимости</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D1%82%D0%B5%D0%BD%D1%86%D0%B8%D0%B0%D0%BB%D0%BE%D0%B2_%D0%94%D0%B6%D0%BE%D0%BD%D1%81%D0%BE%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B5_%D0%BF%D0%BE%D1%82%D0%BE%D0%BA%D0%B0_%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D0%BE%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8&amp;diff=42142"/>
				<updated>2014-12-13T14:56:15Z</updated>
		
		<summary type="html">&lt;p&gt;188.162.64.36: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Метод интересен прежде всего тем, что [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости|задачу о назначениях]] можно свести к задаче о поиске потока минимальной стоимости, и тогда эффективность решения задачи о назначениях будет определяться именно асимптотикой работы этого алгоритма.&lt;br /&gt;
&lt;br /&gt;
== Мотивация ==&lt;br /&gt;
&lt;br /&gt;
Зачем нужно использовать потенциалы Джонсона?&lt;br /&gt;
&lt;br /&gt;
Идея аналогична идее, использующейся в [[Алгоритм Джонсона|алгоритме Джонсона]].&lt;br /&gt;
&lt;br /&gt;
При [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|поиске потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]] нам требуется находить минимальный по стоимости поток из истока в сток. Это реализуется с помощью алгоритмов поиска кратчайшего пути в графе. Поскольку стоимость некоторых рёбер может быть отрицательной, нам приходится использовать [[Алгоритм Форда-Беллмана|алгоритм Форда-Беллмана]]. Однако гораздо эффективней было бы применить [[Алгоритм Дейкстры|алгоритм Дейкстры]] для этой же цели, так как у него гораздо лучше асимптотика. Для этого нам надо перевзвесить рёбра графа.&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Пусть дана транспортная сеть &amp;lt;tex&amp;gt;\,G(V,E)&amp;lt;/tex&amp;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;\,p_i&amp;lt;/tex&amp;gt;. Тогда остаточная стоимость ребра &amp;lt;tex&amp;gt;\,c_{p_{ij}}&amp;lt;/tex&amp;gt; определяется как&lt;br /&gt;
&amp;lt;tex&amp;gt;\,c_{p_{ij}} = c_{ij} + p_i - p_j &amp;lt;/tex&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Заметим, что сумма остаточных стоимостей ребер вдоль любого пути отличается от суммы стоимостей вдоль того же самого пути на разность между потенциалом первой и последней вершины.&lt;br /&gt;
&lt;br /&gt;
== Использование потенциалов Джонсона ==&lt;br /&gt;
Возьмём значения потенциалов в вершинах равными минимальному по цене расстоянию от стока до них или &amp;lt;tex&amp;gt;+\infty&amp;lt;/tex&amp;gt;, если она недостижима. Так как &amp;lt;tex&amp;gt;\,c_{ij} + p_i&amp;lt;/tex&amp;gt; — это длина какого-то пути до вершины &amp;lt;tex&amp;gt;\,j&amp;lt;/tex&amp;gt;, а &amp;lt;tex&amp;gt;\,p_j&amp;lt;/tex&amp;gt; — длина минимального пути, то &amp;lt;tex&amp;gt;c_{p_{ij}} \geqslant 0&amp;lt;/tex&amp;gt;, что от нас и требовалось.&lt;br /&gt;
Значения потенциалов найдём с помощью [[Алгоритм Форда-Беллмана|алгоритма Форда-Беллмана]]. Таким образом, нам его придётся запустить всего один раз, а не на каждом шаге алгоритма.&lt;br /&gt;
&lt;br /&gt;
==Реализация==&lt;br /&gt;
Модифицируем псевдокод из статьи про [[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости]]:&lt;br /&gt;
&amp;lt;font size=30&amp;gt; НЕ ЧИТАЙТЕ, В РЕАЛИЗАЦИИ НАПИСАНА ПОЛНАЯ ЧУШЬ, после второй итерации, скорее всего, появятся ребра отрицательного веса &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 '''for''' &amp;lt;tex&amp;gt;e \in E&amp;lt;/tex&amp;gt; {&lt;br /&gt;
      &amp;lt;tex&amp;gt;f[e] \leftarrow 0&amp;lt;/tex&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 Запустим алгоритм Форда-Беллмана, в результате для каждой вершины: &amp;lt;tex&amp;gt;p[v] &amp;lt;/tex&amp;gt; — расстояние &amp;lt;tex&amp;gt;s \leadsto e&amp;lt;/tex&amp;gt;, &lt;br /&gt;
 если за длину ребра принимается его стоимость.&lt;br /&gt;
 '''for''' &amp;lt;tex&amp;gt;e \in E&amp;lt;/tex&amp;gt; {&lt;br /&gt;
      &amp;lt;tex&amp;gt;c[e] \leftarrow c[e] + p[e.from] - p[e.to]&amp;lt;/tex&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 '''while''' (существует путь &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; в остаточной сети &amp;lt;tex&amp;gt;G_f&amp;lt;/tex&amp;gt;) {&lt;br /&gt;
       Найти &amp;lt;tex&amp;gt;P &amp;lt;/tex&amp;gt; — кратчайший в смысле стоимости путь &amp;lt;tex&amp;gt;s \leadsto t&amp;lt;/tex&amp;gt; с помощью алгоритма Дейкстры&lt;br /&gt;
       дополнить поток &amp;lt;tex&amp;gt;f&amp;lt;/tex&amp;gt; вдоль &amp;lt;tex&amp;gt;P&amp;lt;/tex&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Асимптотика==&lt;br /&gt;
Пусть все пропускные способности целочисленны.&lt;br /&gt;
[[Поиск потока минимальной стоимости методом дополнения вдоль путей минимальной стоимости|Метод целиком]] работает за &amp;lt;tex&amp;gt;O(F(V, E) \cdot |f|)&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;F(V, E)&amp;lt;/tex&amp;gt; — время одной итерации.&lt;br /&gt;
&lt;br /&gt;
Время, затраченное на одну итерацию, определяется скоростью поиска кратчайшего пути.&lt;br /&gt;
Если для этой цели использовать [[Алгоритм Дейкстры|алгоритм Дейкстры]] с Фиббоначевыми кучами, то поиск мы осуществим за &amp;lt;tex&amp;gt;O(V \log V + E)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Не стоит так же забывать, что для расчёта потенциалов мы один раз запустили Алгоритм Форда-Беллмана.&lt;br /&gt;
В результате получим время работы &amp;lt;tex&amp;gt;O((V \log V + E) \cdot |f| + V E)&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Это лучше, чем &amp;lt;tex&amp;gt;O((V E) \cdot |f|)&amp;lt;/tex&amp;gt;, что получается при использовании [[Алгоритм Форда-Беллмана|алгоритма Форда-Беллмана]] для поиска кратчайшего пути на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В применении к [[Сведение задачи о назначениях к задаче о потоке минимальной стоимости|задаче о назначениях]]: пусть у нас есть &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; назначений. Построим специальным образом граф. Искомый поток в нём имеет имеет мощность &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt;. Количество вершин  — &amp;lt;tex&amp;gt;O(N)&amp;lt;/tex&amp;gt;, рёбер — &amp;lt;tex&amp;gt;O(N^2)&amp;lt;/tex&amp;gt;. Итого получаем асимптотику &amp;lt;tex&amp;gt;O(N^2 \log N + 2N^3) = O(N^3)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* ''Andrew V. Goldberg'' An Efficient implementation of a scaling minimum-cost flow algorithm - Journal of Algorithms, 1997&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Задача о потоке минимальной стоимости]]&lt;/div&gt;</summary>
		<author><name>188.162.64.36</name></author>	</entry>

	</feed>