213 | | This group describes the algorithms for finding shortest paths in graphs. |
| 218 | This group describes the algorithms for finding shortest paths in digraphs. |
| 219 | |
| 220 | - \ref Dijkstra algorithm for finding shortest paths from a source node |
| 221 | when all arc lengths are non-negative. |
| 222 | - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths |
| 223 | from a source node when arc lenghts can be either positive or negative, |
| 224 | but the digraph should not contain directed cycles with negative total |
| 225 | length. |
| 226 | - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms |
| 227 | for solving the \e all-pairs \e shortest \e paths \e problem when arc |
| 228 | lenghts can be either positive or negative, but the digraph should |
| 229 | not contain directed cycles with negative total length. |
| 230 | - \ref Suurballe A successive shortest path algorithm for finding |
| 231 | arc-disjoint paths between two nodes having minimum total length. |
224 | | The maximum flow problem is to find a flow between a single source and |
225 | | a single target that is maximum. Formally, there is a \f$G=(V,A)\f$ |
226 | | directed graph, an \f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity |
227 | | function and given \f$s, t \in V\f$ source and target node. The |
228 | | maximum flow is the \f$f_a\f$ solution of the next optimization problem: |
| 242 | The \e maximum \e flow \e problem is to find a flow of maximum value between |
| 243 | a single source and a single target. Formally, there is a \f$G=(V,A)\f$ |
| 244 | digraph, a \f$cap:A\rightarrow\mathbf{R}^+_0\f$ capacity function and |
| 245 | \f$s, t \in V\f$ source and target nodes. |
| 246 | A maximum flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of the |
| 247 | following optimization problem. |
230 | | \f[ 0 \le f_a \le c_a \f] |
231 | | \f[ \sum_{v\in\delta^{-}(u)}f_{vu}=\sum_{v\in\delta^{+}(u)}f_{uv} |
232 | | \qquad \forall u \in V \setminus \{s,t\}\f] |
233 | | \f[ \max \sum_{v\in\delta^{+}(s)}f_{uv} - \sum_{v\in\delta^{-}(s)}f_{vu}\f] |
| 249 | \f[ \max\sum_{a\in\delta_{out}(s)}f(a) - \sum_{a\in\delta_{in}(s)}f(a) \f] |
| 250 | \f[ \sum_{a\in\delta_{out}(v)} f(a) = \sum_{a\in\delta_{in}(v)} f(a) |
| 251 | \qquad \forall v\in V\setminus\{s,t\} \f] |
| 252 | \f[ 0 \leq f(a) \leq cap(a) \qquad \forall a\in A \f] |
236 | | - \ref lemon::EdmondsKarp "Edmonds-Karp" |
237 | | - \ref lemon::Preflow "Goldberg's Preflow algorithm" |
238 | | - \ref lemon::DinitzSleatorTarjan "Dinitz's blocking flow algorithm with dynamic trees" |
239 | | - \ref lemon::GoldbergTarjan "Preflow algorithm with dynamic trees" |
| 255 | - \ref EdmondsKarp Edmonds-Karp algorithm. |
| 256 | - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm. |
| 257 | - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees. |
| 258 | - \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees. |
241 | | In most cases the \ref lemon::Preflow "Preflow" algorithm provides the |
242 | | fastest method to compute the maximum flow. All impelementations |
243 | | provides functions to query the minimum cut, which is the dual linear |
244 | | programming problem of the maximum flow. |
| 260 | In most cases the \ref Preflow "Preflow" algorithm provides the |
| 261 | fastest method for computing a maximum flow. All implementations |
| 262 | provides functions to also query the minimum cut, which is the dual |
| 263 | problem of the maximum flow. |
| 274 | |
| 275 | The \e minimum \e cost \e flow \e problem is to find a feasible flow of |
| 276 | minimum total cost from a set of supply nodes to a set of demand nodes |
| 277 | in a network with capacity constraints and arc costs. |
| 278 | Formally, let \f$G=(V,A)\f$ be a digraph, |
| 279 | \f$lower, upper: A\rightarrow\mathbf{Z}^+_0\f$ denote the lower and |
| 280 | upper bounds for the flow values on the arcs, |
| 281 | \f$cost: A\rightarrow\mathbf{Z}^+_0\f$ denotes the cost per unit flow |
| 282 | on the arcs, and |
| 283 | \f$supply: V\rightarrow\mathbf{Z}\f$ denotes the supply/demand values |
| 284 | of the nodes. |
| 285 | A minimum cost flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of |
| 286 | the following optimization problem. |
| 287 | |
| 288 | \f[ \min\sum_{a\in A} f(a) cost(a) \f] |
| 289 | \f[ \sum_{a\in\delta_{out}(v)} f(a) - \sum_{a\in\delta_{in}(v)} f(a) = |
| 290 | supply(v) \qquad \forall v\in V \f] |
| 291 | \f[ lower(a) \leq f(a) \leq upper(a) \qquad \forall a\in A \f] |
| 292 | |
| 293 | LEMON contains several algorithms for solving minimum cost flow problems: |
| 294 | - \ref CycleCanceling Cycle-canceling algorithms. |
| 295 | - \ref CapacityScaling Successive shortest path algorithm with optional |
| 296 | capacity scaling. |
| 297 | - \ref CostScaling Push-relabel and augment-relabel algorithms based on |
| 298 | cost scaling. |
| 299 | - \ref NetworkSimplex Primal network simplex algorithm with various |
| 300 | pivot strategies. |
265 | | The minimum cut problem is to find a non-empty and non-complete |
266 | | \f$X\f$ subset of the vertices with minimum overall capacity on |
267 | | outgoing arcs. Formally, there is \f$G=(V,A)\f$ directed graph, an |
268 | | \f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum |
| 311 | The \e minimum \e cut \e problem is to find a non-empty and non-complete |
| 312 | \f$X\f$ subset of the nodes with minimum overall capacity on |
| 313 | outgoing arcs. Formally, there is a \f$G=(V,A)\f$ digraph, a |
| 314 | \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum |
276 | | - \ref lemon::HaoOrlin "Hao-Orlin algorithm" to calculate minimum cut |
277 | | in directed graphs |
278 | | - \ref lemon::NagamochiIbaraki "Nagamochi-Ibaraki algorithm" to |
279 | | calculate minimum cut in undirected graphs |
280 | | - \ref lemon::GomoryHuTree "Gomory-Hu tree computation" to calculate all |
281 | | pairs minimum cut in undirected graphs |
| 322 | - \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut |
| 323 | in directed graphs. |
| 324 | - \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for |
| 325 | calculating minimum cut in undirected graphs. |
| 326 | - \ref GomoryHuTree "Gomory-Hu tree computation" for calculating |
| 327 | all-pairs minimum cut in undirected graphs. |
327 | | LEMON contains the next algorithms: |
328 | | - \ref lemon::MaxBipartiteMatching "MaxBipartiteMatching" Hopcroft-Karp |
329 | | augmenting path algorithm for calculate maximum cardinality matching in |
330 | | bipartite graphs |
331 | | - \ref lemon::PrBipartiteMatching "PrBipartiteMatching" Push-Relabel |
332 | | algorithm for calculate maximum cardinality matching in bipartite graphs |
333 | | - \ref lemon::MaxWeightedBipartiteMatching "MaxWeightedBipartiteMatching" |
334 | | Successive shortest path algorithm for calculate maximum weighted matching |
335 | | and maximum weighted bipartite matching in bipartite graph |
336 | | - \ref lemon::MinCostMaxBipartiteMatching "MinCostMaxBipartiteMatching" |
337 | | Successive shortest path algorithm for calculate minimum cost maximum |
338 | | matching in bipartite graph |
339 | | - \ref lemon::MaxMatching "MaxMatching" Edmond's blossom shrinking algorithm |
340 | | for calculate maximum cardinality matching in general graph |
341 | | - \ref lemon::MaxWeightedMatching "MaxWeightedMatching" Edmond's blossom |
342 | | shrinking algorithm for calculate maximum weighted matching in general |
343 | | graph |
344 | | - \ref lemon::MaxWeightedPerfectMatching "MaxWeightedPerfectMatching" |
345 | | Edmond's blossom shrinking algorithm for calculate maximum weighted |
346 | | perfect matching in general graph |
| 373 | The matching algorithms implemented in LEMON: |
| 374 | - \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm |
| 375 | for calculating maximum cardinality matching in bipartite graphs. |
| 376 | - \ref PrBipartiteMatching Push-relabel algorithm |
| 377 | for calculating maximum cardinality matching in bipartite graphs. |
| 378 | - \ref MaxWeightedBipartiteMatching |
| 379 | Successive shortest path algorithm for calculating maximum weighted |
| 380 | matching and maximum weighted bipartite matching in bipartite graphs. |
| 381 | - \ref MinCostMaxBipartiteMatching |
| 382 | Successive shortest path algorithm for calculating minimum cost maximum |
| 383 | matching in bipartite graphs. |
| 384 | - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating |
| 385 | maximum cardinality matching in general graphs. |
| 386 | - \ref MaxWeightedMatching Edmond's blossom shrinking algorithm for calculating |
| 387 | maximum weighted matching in general graphs. |
| 388 | - \ref MaxWeightedPerfectMatching |
| 389 | Edmond's blossom shrinking algorithm for calculating maximum weighted |
| 390 | perfect matching in general graphs. |