Summary of network flow/fee flow algorithm complexity and ease of use

The algorithm theory speed analysis of network flow is a pit, write a post to end it:

1. Augmenting path algorithm
(1) The ancestor of the Ford-Fulkerson augmented path algorithm, looking for any augmented path, and augmenting the complexity along the path, dfs is implemented as $O(E*|Maxflow|))$, when bfs is implemented, due to Different ways of storing graphs, adjacency list $O(V*E 2 )$, adjacency matrix $O(V 3 )$
(2) The Edmonds-Karp algorithm uses BFS to find the augmentation path. The time complexity of the algorithm is O(VE^2), and the time complexity is relatively ideal. It can be considered when the number of edges in the graph is not many.
(3) The time complexity of MPLA (shortest path value-adding algorithm) is O(VE^2). The concept of hierarchical graph is introduced on the residual graph to construct a hierarchical graph O(VE), and the V stages are multi-stage BFS searching for incremental increase in each stage. The broad path is O(E^2), and the upper bound of the total complexity is O(VE^2)
(4) Dinic replaces the multiple BFS augmentation of MPLA with one DFS, and the efficiency of the algorithm has been greatly improved. Similarly, the hierarchical graph O(VE) is established, and the V stages each stage a DFS to find the light-enhancing path O(VE), and the upper bound of the total complexity is O(V^2E).
(5) The time efficiency of SAP (shortest augmenting paths) is similar to that of Dinic. It is relatively simple to implement, and the speed of the unique GAP optimization can be greatly improved. Finding the shortest augmenting path can be said to be an optimized version of the EK algorithm. The time complexity is O(V^2E).
*(6) Capacity-Scaling algorithm, the time complexity is O(E^2log Cmax), the programming is relatively simple. (I haven't studied it yet, I will study it later)
2. Reserve advance algorithm
(1) Push_relabel can achieve a more ideal bound O(V^2E) by using the pressing and relabeling algorithm, and introduces the concept of pre-flow.
(2) Relabel-to-front time complexity O(V^3), use a list to string the vertices of V-{s,t} into a linked list L, and each vertex has their adjacent vertex set N[u] .When a point is Discharged, it will be pushed to the head of the linked list L. The running speed of the algorithm is increased to O(v^3) compared with Push_relabel, but the programming complexity is one level higher than that of Push_relabel.
(3) The Highest-relabel algorithm is improved on the basis of the Relabel-to-front algorithm to increase the time complexity of the algorithm to O(V 2 E 1/2 ). Coupled with BFS preprocessing and GAP optimization, the efficiency will be incredible.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324852566&siteId=291194637