Edmonds's algorithm
In graph theory, a branch of mathematics, Edmonds's algorithm or Chu–Liu/Edmonds's algorithm is an algorithm for finding a maximum or minimum branchings. When nodes are connected by weighted edges that are directed, a minimum spanning tree algorithm cannot be used. Instead an optimum branching algorithm should be applied using the algorithm proposed independently first by Chu and Liu (1965) and then by Edmonds (1967). To find a maximum path length, the largest edge value is found and connected between the two nodes, then the next largest value, and so on. If an edge creates a loop, it is erased. A minimum path length is found by starting from the smallest value.
Contents |
Conditions
Let BV be a vertex bucket and BE be an edge bucket. Let v be a vertex and e be an edge of maximum positive weight that is incident to v. Ci is a circuit. G0 = (V0,E0) is the original digraph. ui is a replacement vertex for Ci.
Execution
i=0
A:
if BV = Vi then goto B
for some vertex
and
{
find an edge e = (x,v) such that w(e) = max{ w(w,y)|(w,y)
Ei}
if w(e) ≤ 0 then goto A
}
if
contains a circuit {
i=i+1
construct Gi by shrinking Ci to ui
modify BE, BV and some edge weights
}
goto A
B:
while i ≠ 0 {
reconstruct Gi − 1 and rename some edges in BE
if ui was a root of an out-tree in BE {
and
}else{
and
}
i=i-1
}
Maximum branching weight =
References
- Y. J. Chu and T. H. Liu, "On the Shortest Arborescence of a Directed Graph", Science Sinica, vol. 14, 1965, pp. 1396-1400.
- J. Edmonds, “Optimum Branchings”, J. Res. Nat. Bur. Standards, vol. 71B, 1967, pp. 233-240.
- Alan Gibbons Algorithmic Graph Theory, Cambridge University press, 1985 ISBN: 0-521-28881-9
External links
- The Directed Minimum Spanning Tree Problem Description of the algorithm summarized by Shanchieh Jay Yang, May 2000.
- Edmonds's algorithm ( edmonds-alg ) - An open source implementation of Edmonds's algorithm written in C++ and licensed under the MIT License
- AlgoWiki - Edmonds's algorithm - A public-domain implementation of Edmonds's algorithm written in Java.