<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.formulasearchengine.com/w/index.php?action=history&amp;feed=atom&amp;title=Smooth_functor</id>
	<title>Smooth functor - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.formulasearchengine.com/w/index.php?action=history&amp;feed=atom&amp;title=Smooth_functor"/>
	<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Smooth_functor&amp;action=history"/>
	<updated>2026-07-29T02:41:08Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.47.0-wmf.7</generator>
	<entry>
		<id>https://en.formulasearchengine.com/w/index.php?title=Smooth_functor&amp;diff=24457&amp;oldid=prev</id>
		<title>en&gt;Helpful Pixie Bot: ISBNs (Build KH)</title>
		<link rel="alternate" type="text/html" href="https://en.formulasearchengine.com/w/index.php?title=Smooth_functor&amp;diff=24457&amp;oldid=prev"/>
		<updated>2012-05-12T01:05:35Z</updated>

		<summary type="html">&lt;p&gt;ISBNs (Build KH)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Dinitz&amp;#039;s algorithm&amp;#039;&amp;#039;&amp;#039; is a [[strongly polynomial]] algorithm for computing the [[maximum flow]] in a [[flow network]], conceived in 1970 by Israeli (formerly Soviet) computer scientist [[Yefim Dinitz]].&amp;lt;ref&amp;gt;{{cite journal | author = [[Yefim Dinitz]]  | title = Algorithm for solution of a problem of maximum flow in a network with power estimation | journal = Doklady Akademii nauk SSSR | volume = 11 | year = 1970 | pages = 1277&amp;amp;ndash;1280 | url=http://www.cs.bgu.ac.il/~dinitz/D70.pdf}}&amp;lt;/ref&amp;gt; The algorithm runs in &amp;lt;math&amp;gt;O(V^2 E)&amp;lt;/math&amp;gt; time and is similar to the [[Edmonds–Karp algorithm]], which runs in &amp;lt;math&amp;gt;O(VE^2)&amp;lt;/math&amp;gt; time, in that it uses shortest augmenting paths. The introduction of the concepts of the &amp;#039;&amp;#039;level graph&amp;#039;&amp;#039; and &amp;#039;&amp;#039;blocking flow&amp;#039;&amp;#039; enable Dinic&amp;#039;s algorithm to achieve its performance.&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
Let &amp;lt;math&amp;gt;G = ((V,E),c,s,t)&amp;lt;/math&amp;gt; be a network with &amp;lt;math&amp;gt;c(u,v)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;f(u,v)&amp;lt;/math&amp;gt; the capacity and the flow of the edge &amp;lt;math&amp;gt;(u,v)&amp;lt;/math&amp;gt; respectively.&lt;br /&gt;
&lt;br /&gt;
:The &amp;#039;&amp;#039;&amp;#039;residual capacity&amp;#039;&amp;#039;&amp;#039; is a mapping &amp;lt;math&amp;gt;c_f : V\times V \to R^+&amp;lt;/math&amp;gt; defined as,&lt;br /&gt;
:# if &amp;lt;math&amp;gt;(u,v)\in E&amp;lt;/math&amp;gt;,&lt;br /&gt;
:#: &amp;lt;math&amp;gt;c_f(u,v) = c(u,v) - f(u,v) &amp;lt;/math&amp;gt;&lt;br /&gt;
:#: &amp;lt;math&amp;gt;c_f(v,u) = f(u,v)&amp;lt;/math&amp;gt;&lt;br /&gt;
:# &amp;lt;math&amp;gt;c_f(u,v) = 0&amp;lt;/math&amp;gt; otherwise.&lt;br /&gt;
&lt;br /&gt;
:The &amp;#039;&amp;#039;&amp;#039;residual graph&amp;#039;&amp;#039;&amp;#039; is the graph &amp;lt;math&amp;gt;G_f = ((V, E_f), c_f|_{E_f}, s, t)&amp;lt;/math&amp;gt;, where&lt;br /&gt;
:: &amp;lt;math&amp;gt;E_f = \{(u,v)\in V \times V : c_f(u,v) &amp;gt; 0\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:An &amp;#039;&amp;#039;&amp;#039;augmenting path&amp;#039;&amp;#039;&amp;#039; is an &amp;lt;math&amp;gt;s-t&amp;lt;/math&amp;gt; path in the residual graph &amp;lt;math&amp;gt;G_f&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:Define &amp;lt;math&amp;gt;\operatorname{dist}(v)&amp;lt;/math&amp;gt; to be the length of the shortest path from &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;v&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;G_f&amp;lt;/math&amp;gt;. Then the &amp;#039;&amp;#039;&amp;#039;level graph&amp;#039;&amp;#039;&amp;#039; of &amp;lt;math&amp;gt;G_f&amp;lt;/math&amp;gt; is the graph &amp;lt;math&amp;gt;G_L = (V, E_L, c_f|_{E_L}, s,t)&amp;lt;/math&amp;gt;, where&lt;br /&gt;
:: &amp;lt;math&amp;gt;E_L = \{(u,v)\in E_f : \operatorname{dist}(v) = \operatorname{dist}(u) + 1\}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
:A &amp;#039;&amp;#039;&amp;#039;blocking flow&amp;#039;&amp;#039;&amp;#039; is an &amp;lt;math&amp;gt;s-t&amp;lt;/math&amp;gt; flow &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; such that the graph &amp;lt;math&amp;gt;G&amp;#039; = (V,E_L&amp;#039;, s, t)&amp;lt;/math&amp;gt; with &amp;lt;math&amp;gt;E_L&amp;#039; = \{(u,v) : f(u,v) &amp;lt; c_f|_{E_L}(u,v)\}&amp;lt;/math&amp;gt; contains no &amp;lt;math&amp;gt;s-t&amp;lt;/math&amp;gt; path.&lt;br /&gt;
&lt;br /&gt;
==Algorithm==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dinic&amp;#039;s Algorithm&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: &amp;#039;&amp;#039;Input&amp;#039;&amp;#039;: A network &amp;lt;math&amp;gt;G = ((V, E), c, s, t)&amp;lt;/math&amp;gt;.&lt;br /&gt;
: &amp;#039;&amp;#039;Output&amp;#039;&amp;#039;: An &amp;lt;math&amp;gt;s-t&amp;lt;/math&amp;gt; flow &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; of maximum value.&lt;br /&gt;
# Set &amp;lt;math&amp;gt;f(e) = 0&amp;lt;/math&amp;gt; for each &amp;lt;math&amp;gt;e\in E&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Construct &amp;lt;math&amp;gt;G_L&amp;lt;/math&amp;gt; from &amp;lt;math&amp;gt;G_f&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. If &amp;lt;math&amp;gt;\operatorname{dist}(t) = \infty&amp;lt;/math&amp;gt;, stop and output &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Find a blocking flow &amp;lt;math&amp;gt;f\;&amp;#039;&amp;lt;/math&amp;gt; in &amp;lt;math&amp;gt;G_L&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Augment flow &amp;lt;math&amp;gt;\ f&amp;lt;/math&amp;gt; by &amp;lt;math&amp;gt;f\;&amp;#039;&amp;lt;/math&amp;gt; and go back to step 2.&lt;br /&gt;
&lt;br /&gt;
==Analysis==&lt;br /&gt;
It can be shown that the number of edges in each blocking flow increases by at least 1 each time and thus there are at most &amp;lt;math&amp;gt;n-1&amp;lt;/math&amp;gt; blocking flows in the algorithm, where &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; is the number of vertices in the network. The level graph &amp;lt;math&amp;gt;G_L&amp;lt;/math&amp;gt; can be constructed by [[Breadth-first search]] in &amp;lt;math&amp;gt;O(E)&amp;lt;/math&amp;gt; time and a blocking flow in each level graph can be found in &amp;lt;math&amp;gt;O(VE)&amp;lt;/math&amp;gt; time. Hence, the running time of Dinic&amp;#039;s algorithm is &amp;lt;math&amp;gt;O(V^2 E)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Using a data structure called [[dynamic trees]], the running time of finding a blocking flow in each phase can be reduced to &amp;lt;math&amp;gt;O(E \log V)&amp;lt;/math&amp;gt; and therefore the running time of Dinic&amp;#039;s algorithm can be improved to &amp;lt;math&amp;gt;O(VE \log V)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Special cases ===&lt;br /&gt;
In networks with unit capacities, a much stronger time bound holds. Each blocking flow can be found in &amp;lt;math&amp;gt;O(E)&amp;lt;/math&amp;gt; time, and it can be shown that the number of phases does not exceed &amp;lt;math&amp;gt;O(\sqrt{E})&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;O(V^{2/3})&amp;lt;/math&amp;gt;. Thus the algorithm runs in &amp;lt;math&amp;gt;O(\min(V^{2/3}, E^{1/2})E)&amp;lt;/math&amp;gt; time.&lt;br /&gt;
&lt;br /&gt;
In networks arising during the solution of [[bipartite matching]] problem, the number of phases is bounded by &amp;lt;math&amp;gt;O(\sqrt{V})&amp;lt;/math&amp;gt;, therefore leading to the &amp;lt;math&amp;gt;O(\sqrt{V} E)&amp;lt;/math&amp;gt; time bound. The resulting algorithm is also known as [[Hopcroft–Karp algorithm]]. More generally, this bound holds for any &amp;#039;&amp;#039;unit network&amp;#039;&amp;#039; — a network in which each vertex, except for source and sink, either has a single entering edge of capacity one, or a single outgoing edge of capacity one, and all other capacities are arbitrary integers.{{sfn|Tarjan|1983|p=102}}&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
The following is a simulation of the Dinic&amp;#039;s algorithm. In the level graph &amp;lt;math&amp;gt;G_L&amp;lt;/math&amp;gt;, the vertices with labels in red are the values &amp;lt;math&amp;gt;\operatorname{dist}(v)&amp;lt;/math&amp;gt;. The paths in blue form a blocking flow.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center; width:915px;&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! width=&amp;quot;15px&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
! &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;&lt;br /&gt;
! &amp;lt;math&amp;gt;G_f&amp;lt;/math&amp;gt;&lt;br /&gt;
! &amp;lt;math&amp;gt;G_L&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! 1.&lt;br /&gt;
| [[File:Dinic algorithm G1.svg|300px]]&lt;br /&gt;
| [[File:Dinic algorithm Gf1.svg|300px]]&lt;br /&gt;
| [[File:Dinic algorithm GL1.svg|300px]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;left&amp;quot; colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
The blocking flow consists of&lt;br /&gt;
# &amp;lt;math&amp;gt;\{s, 1, 3, t\}&amp;lt;/math&amp;gt; with 4 units of flow,&lt;br /&gt;
# &amp;lt;math&amp;gt;\{s, 1, 4, t\}&amp;lt;/math&amp;gt; with 6 units of flow, and&lt;br /&gt;
# &amp;lt;math&amp;gt;\{s, 2, 4, t\}&amp;lt;/math&amp;gt; with 4 units of flow.&lt;br /&gt;
Therefore the blocking flow is of 14 units and the value of flow &amp;lt;math&amp;gt;|f|&amp;lt;/math&amp;gt; is 14. Note that each augmenting path in the blocking flow has &amp;#039;&amp;#039;3&amp;#039;&amp;#039; edges.&lt;br /&gt;
|-&lt;br /&gt;
! 2.&lt;br /&gt;
| [[File:Dinic algorithm G2.svg|300px]]&lt;br /&gt;
| [[File:Dinic algorithm Gf2.svg|300px]]&lt;br /&gt;
| [[File:Dinic algorithm GL2.svg|300px]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;left&amp;quot; colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
The blocking flow consists of&lt;br /&gt;
# &amp;lt;math&amp;gt;\{s, 2, 4, 3, t\}&amp;lt;/math&amp;gt; with 5 units of flow.&lt;br /&gt;
Therefore the blocking flow is of 5 units and the value of flow &amp;lt;math&amp;gt;|f|&amp;lt;/math&amp;gt; is 14 + 5 = 19. Note that each augmenting path has 4 edges.&lt;br /&gt;
|-&lt;br /&gt;
! 3.&lt;br /&gt;
| [[File:Dinic algorithm G3.svg|300px]]&lt;br /&gt;
| [[File:Dinic algorithm Gf3.svg|300px]]&lt;br /&gt;
| [[File:Dinic algorithm GL3.svg|300px]]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| align=&amp;quot;left&amp;quot; colspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
Since &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; cannot be reached in &amp;lt;math&amp;gt;G_f&amp;lt;/math&amp;gt;. The algorithm terminates and returns a flow with maximum value of 19. Note that in each blocking flow, the number of edges in the augmenting path increases by at least 1.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
Dinic&amp;#039;s algorithm was published in 1970 by former Russian Computer Scientist Yefim (Chaim) A. Dinitz, who is today a member of the Computer Science department at [[Ben-Gurion University of the Negev]] (Israel), earlier than the [[Edmonds–Karp algorithm]], which was published in 1972 but was discovered earlier. They independently showed that in the [[Ford–Fulkerson algorithm]], if each augmenting path is the shortest one, the length of the augmenting paths is non-decreasing.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Ford–Fulkerson algorithm]]&lt;br /&gt;
* [[Maximum flow problem]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* {{cite book | author = Yefim Dinitz | editor =  [[Oded Goldreich]], Arnold  L. Rosenberg, and Alan L. Selman | title = Theoretical Computer Science: Essays in Memory of [[Shimon Even]] | chapter = Dinitz&amp;#039; Algorithm: The Original Version and Even&amp;#039;s Version | year = 2006 | publisher = Springer | isbn = 978-3-540-32880-3 | pages = 218–240 | url = http://www.cs.bgu.ac.il/~dinitz/Papers/Dinitz_alg.pdf}}&lt;br /&gt;
* {{cite book | ref=harv | last=Tarjan | first=R. E. |year =1983 | title=Data structures and network algorithms }}&lt;br /&gt;
* {{cite book | author =  B. H. Korte, Jens Vygen | title = Combinatorial Optimization: Theory and Algorithms (Algorithms and Combinatorics, 21) | chapter = 8.4 Blocking Flows and Fujishige&amp;#039;s Algorithm | year = 2008 | publisher = Springer Berlin Heidelberg | isbn = 978-3-540-71844-4 | pages = 174–176}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Network flow]]&lt;br /&gt;
[[Category:Graph algorithms]]&lt;/div&gt;</summary>
		<author><name>en&gt;Helpful Pixie Bot</name></author>
	</entry>
</feed>