Class MaximumFlowPushRelabelDynamicTrees
- All Implemented Interfaces:
MinimumEdgeCutSt
,MaximumFlow
The push-relabel algorithm maintain a "preflow" and gradually converts it into a maximum flow by moving flow locally between neighboring vertices using push operations under the guidance of an admissible network maintained by relabel operations.
Conceptually, the dynamic trees are used to push flow along multiple edges simultaneously. The current flow of each individual edges is not maintained explicitly, rather each path is stored as a dynamic tree, and the flow is stored as a weight of the tree edges - to calculate the weight (flow) of an edge, one would have to traverse the tree from the root to the edge and sum all weights on the path.
Using the dynamic trees reduce the running time of the push-relabel algorithm to \(O(m n \log (n^2 / m))\) and linear
space. This implementation uses FIFO to order the vertices to be examined. Note that this implementation is usually
out preformed in practice by simpler variants of the push-relabel algorithm, such as MaximumFlowPushRelabel
with highest label heuristic.
- Author:
- Barak Ugav
- See Also:
-
Constructor Summary
ConstructorDescriptionCreate a new maximum flow algorithm object. -
Method Summary
Methods inherited from class com.jgalgo.alg.flow.MaximumFlowAbstract
computeMaximumFlow, computeMaximumFlow
Methods inherited from class com.jgalgo.alg.connect.MinimumEdgeCutStAbstract
computeMinimumCut, computeMinimumCut
-
Constructor Details
-
MaximumFlowPushRelabelDynamicTrees
public MaximumFlowPushRelabelDynamicTrees()Create a new maximum flow algorithm object.Please prefer using
MaximumFlow.newInstance()
to get a default implementation for theMaximumFlow
interface.
-