Changeset 418:ad483acf1654 in lemon-main
- Timestamp:
- 12/02/08 16:33:22 (16 years ago)
- Branch:
- default
- Children:
- 419:9afe81e4c543, 420:6a2a33ad261b, 430:09e416d35896, 446:d369e885d196, 501:7f8560cb9d65
- Parents:
- 413:d8b87e9b90c3 (diff), 417:6ff53afe98b5 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Phase:
- public
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/groups.dox
r406 r418 60 60 61 61 <b>See also:</b> \ref graph_concepts "Graph Structure Concepts". 62 */ 63 64 /** 65 @defgroup graph_adaptors Adaptor Classes for graphs 66 @ingroup graphs 67 \brief This group contains several adaptor classes for digraphs and graphs 68 69 The main parts of LEMON are the different graph structures, generic 70 graph algorithms, graph concepts which couple these, and graph 71 adaptors. While the previous notions are more or less clear, the 72 latter one needs further explanation. Graph adaptors are graph classes 73 which serve for considering graph structures in different ways. 74 75 A short example makes this much clearer. Suppose that we have an 76 instance \c g of a directed graph type say ListDigraph and an algorithm 77 \code 78 template <typename Digraph> 79 int algorithm(const Digraph&); 80 \endcode 81 is needed to run on the reverse oriented graph. It may be expensive 82 (in time or in memory usage) to copy \c g with the reversed 83 arcs. In this case, an adaptor class is used, which (according 84 to LEMON digraph concepts) works as a digraph. The adaptor uses the 85 original digraph structure and digraph operations when methods of the 86 reversed oriented graph are called. This means that the adaptor have 87 minor memory usage, and do not perform sophisticated algorithmic 88 actions. The purpose of it is to give a tool for the cases when a 89 graph have to be used in a specific alteration. If this alteration is 90 obtained by a usual construction like filtering the arc-set or 91 considering a new orientation, then an adaptor is worthwhile to use. 92 To come back to the reverse oriented graph, in this situation 93 \code 94 template<typename Digraph> class ReverseDigraph; 95 \endcode 96 template class can be used. The code looks as follows 97 \code 98 ListDigraph g; 99 ReverseDigraph<ListGraph> rg(g); 100 int result = algorithm(rg); 101 \endcode 102 After running the algorithm, the original graph \c g is untouched. 103 This techniques gives rise to an elegant code, and based on stable 104 graph adaptors, complex algorithms can be implemented easily. 105 106 In flow, circulation and bipartite matching problems, the residual 107 graph is of particular importance. Combining an adaptor implementing 108 this, shortest path algorithms and minimum mean cycle algorithms, 109 a range of weighted and cardinality optimization algorithms can be 110 obtained. For other examples, the interested user is referred to the 111 detailed documentation of particular adaptors. 112 113 The behavior of graph adaptors can be very different. Some of them keep 114 capabilities of the original graph while in other cases this would be 115 meaningless. This means that the concepts that they are models of depend 116 on the graph adaptor, and the wrapped graph(s). 117 If an arc of \c rg is deleted, this is carried out by deleting the 118 corresponding arc of \c g, thus the adaptor modifies the original graph. 119 120 But for a residual graph, this operation has no sense. 121 Let us stand one more example here to simplify your work. 122 RevGraphAdaptor has constructor 123 \code 124 ReverseDigraph(Digraph& digraph); 125 \endcode 126 This means that in a situation, when a <tt>const ListDigraph&</tt> 127 reference to a graph is given, then it have to be instantiated with 128 <tt>Digraph=const ListDigraph</tt>. 129 \code 130 int algorithm1(const ListDigraph& g) { 131 RevGraphAdaptor<const ListDigraph> rg(g); 132 return algorithm2(rg); 133 } 134 \endcode 62 135 */ 63 136 -
doc/groups.dox
r416 r418 16 16 * 17 17 */ 18 19 namespace lemon { 18 20 19 21 /** … … 162 164 163 165 This group describes maps that are specifically designed to assign 164 values to the nodes and arcs of graphs. 166 values to the nodes and arcs/edges of graphs. 167 168 If you are looking for the standard graph maps (\c NodeMap, \c ArcMap, 169 \c EdgeMap), see the \ref graph_concepts "Graph Structure Concepts". 165 170 */ 166 171 … … 173 178 maps from other maps. 174 179 175 Most of them are \ref lemon::concepts::ReadMap "read-only maps".180 Most of them are \ref concepts::ReadMap "read-only maps". 176 181 They can make arithmetic and logical operations between one or two maps 177 182 (negation, shifting, addition, multiplication, logical 'and', 'or', … … 275 280 \brief Common graph search algorithms. 276 281 277 This group describes the common graph search algorithms like278 Breadth-First Search (BFS) and Depth-First Search (DFS).282 This group describes the common graph search algorithms, namely 283 \e breadth-first \e search (BFS) and \e depth-first \e search (DFS). 279 284 */ 280 285 … … 284 289 \brief Algorithms for finding shortest paths. 285 290 286 This group describes the algorithms for finding shortest paths in graphs. 291 This group describes the algorithms for finding shortest paths in digraphs. 292 293 - \ref Dijkstra algorithm for finding shortest paths from a source node 294 when all arc lengths are non-negative. 295 - \ref BellmanFord "Bellman-Ford" algorithm for finding shortest paths 296 from a source node when arc lenghts can be either positive or negative, 297 but the digraph should not contain directed cycles with negative total 298 length. 299 - \ref FloydWarshall "Floyd-Warshall" and \ref Johnson "Johnson" algorithms 300 for solving the \e all-pairs \e shortest \e paths \e problem when arc 301 lenghts can be either positive or negative, but the digraph should 302 not contain directed cycles with negative total length. 303 - \ref Suurballe A successive shortest path algorithm for finding 304 arc-disjoint paths between two nodes having minimum total length. 287 305 */ 288 306 … … 295 313 feasible circulations. 296 314 297 The maximum flow problem is to find a flow between a single source and 298 a single target that is maximum. Formally, there is a \f$G=(V,A)\f$ 299 directed graph, an \f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity 300 function and given \f$s, t \in V\f$ source and target node. The 301 maximum flow is the \f$f_a\f$ solution of the next optimization problem: 302 303 \f[ 0 \le f_a \le c_a \f] 304 \f[ \sum_{v\in\delta^{-}(u)}f_{vu}=\sum_{v\in\delta^{+}(u)}f_{uv} 305 \qquad \forall u \in V \setminus \{s,t\}\f] 306 \f[ \max \sum_{v\in\delta^{+}(s)}f_{uv} - \sum_{v\in\delta^{-}(s)}f_{vu}\f] 315 The \e maximum \e flow \e problem is to find a flow of maximum value between 316 a single source and a single target. Formally, there is a \f$G=(V,A)\f$ 317 digraph, a \f$cap:A\rightarrow\mathbf{R}^+_0\f$ capacity function and 318 \f$s, t \in V\f$ source and target nodes. 319 A maximum flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of the 320 following optimization problem. 321 322 \f[ \max\sum_{a\in\delta_{out}(s)}f(a) - \sum_{a\in\delta_{in}(s)}f(a) \f] 323 \f[ \sum_{a\in\delta_{out}(v)} f(a) = \sum_{a\in\delta_{in}(v)} f(a) 324 \qquad \forall v\in V\setminus\{s,t\} \f] 325 \f[ 0 \leq f(a) \leq cap(a) \qquad \forall a\in A \f] 307 326 308 327 LEMON contains several algorithms for solving maximum flow problems: 309 - \ref lemon::EdmondsKarp "Edmonds-Karp"310 - \ref lemon::Preflow "Goldberg's Preflow algorithm"311 - \ref lemon::DinitzSleatorTarjan "Dinitz's blocking flow algorithm with dynamic trees"312 - \ref lemon::GoldbergTarjan "Preflow algorithm with dynamic trees"313 314 In most cases the \ref lemon::Preflow "Preflow" algorithm provides the315 fastest method to compute the maximum flow. All impelementations316 provides functions to query the minimum cut, which is the dual linear317 pro gramming problem of the maximum flow.328 - \ref EdmondsKarp Edmonds-Karp algorithm. 329 - \ref Preflow Goldberg-Tarjan's preflow push-relabel algorithm. 330 - \ref DinitzSleatorTarjan Dinitz's blocking flow algorithm with dynamic trees. 331 - \ref GoldbergTarjan Preflow push-relabel algorithm with dynamic trees. 332 333 In most cases the \ref Preflow "Preflow" algorithm provides the 334 fastest method for computing a maximum flow. All implementations 335 provides functions to also query the minimum cut, which is the dual 336 problem of the maximum flow. 318 337 */ 319 338 … … 326 345 This group describes the algorithms for finding minimum cost flows and 327 346 circulations. 347 348 The \e minimum \e cost \e flow \e problem is to find a feasible flow of 349 minimum total cost from a set of supply nodes to a set of demand nodes 350 in a network with capacity constraints and arc costs. 351 Formally, let \f$G=(V,A)\f$ be a digraph, 352 \f$lower, upper: A\rightarrow\mathbf{Z}^+_0\f$ denote the lower and 353 upper bounds for the flow values on the arcs, 354 \f$cost: A\rightarrow\mathbf{Z}^+_0\f$ denotes the cost per unit flow 355 on the arcs, and 356 \f$supply: V\rightarrow\mathbf{Z}\f$ denotes the supply/demand values 357 of the nodes. 358 A minimum cost flow is an \f$f:A\rightarrow\mathbf{R}^+_0\f$ solution of 359 the following optimization problem. 360 361 \f[ \min\sum_{a\in A} f(a) cost(a) \f] 362 \f[ \sum_{a\in\delta_{out}(v)} f(a) - \sum_{a\in\delta_{in}(v)} f(a) = 363 supply(v) \qquad \forall v\in V \f] 364 \f[ lower(a) \leq f(a) \leq upper(a) \qquad \forall a\in A \f] 365 366 LEMON contains several algorithms for solving minimum cost flow problems: 367 - \ref CycleCanceling Cycle-canceling algorithms. 368 - \ref CapacityScaling Successive shortest path algorithm with optional 369 capacity scaling. 370 - \ref CostScaling Push-relabel and augment-relabel algorithms based on 371 cost scaling. 372 - \ref NetworkSimplex Primal network simplex algorithm with various 373 pivot strategies. 328 374 */ 329 375 … … 336 382 This group describes the algorithms for finding minimum cut in graphs. 337 383 338 The minimum cutproblem is to find a non-empty and non-complete339 \f$X\f$ subset of the vertices with minimum overall capacity on340 outgoing arcs. Formally, there is \f$G=(V,A)\f$ directed graph, an341 \f$c _a:A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum384 The \e minimum \e cut \e problem is to find a non-empty and non-complete 385 \f$X\f$ subset of the nodes with minimum overall capacity on 386 outgoing arcs. Formally, there is a \f$G=(V,A)\f$ digraph, a 387 \f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum 342 388 cut is the \f$X\f$ solution of the next optimization problem: 343 389 344 390 \f[ \min_{X \subset V, X\not\in \{\emptyset, V\}} 345 \sum_{uv\in A, u\in X, v\not\in X}c_{uv}\f]391 \sum_{uv\in A, u\in X, v\not\in X}cap(uv) \f] 346 392 347 393 LEMON contains several algorithms related to minimum cut problems: 348 394 349 - \ref lemon::HaoOrlin "Hao-Orlin algorithm" to calculateminimum cut350 in directed graphs 351 - \ref lemon::NagamochiIbaraki "Nagamochi-Ibaraki algorithm" to352 calculat e minimum cut in undirected graphs353 - \ref lemon::GomoryHuTree "Gomory-Hu tree computation" to calculate all354 pairs minimum cut in undirected graphs395 - \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut 396 in directed graphs. 397 - \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for 398 calculating minimum cut in undirected graphs. 399 - \ref GomoryHuTree "Gomory-Hu tree computation" for calculating 400 all-pairs minimum cut in undirected graphs. 355 401 356 402 If you want to find minimum cut just between two distinict nodes, 357 please see the \ref max_flow "Maximum Flow page".403 see the \ref max_flow "maximum flow problem". 358 404 */ 359 405 … … 394 440 graphs. The matching problems in bipartite graphs are generally 395 441 easier than in general graphs. The goal of the matching optimization 396 can be thefinding maximum cardinality, maximum weight or minimum cost442 can be finding maximum cardinality, maximum weight or minimum cost 397 443 matching. The search can be constrained to find perfect or 398 444 maximum cardinality matching. 399 445 400 LEMON contains the next algorithms: 401 - \ref lemon::MaxBipartiteMatching "MaxBipartiteMatching" Hopcroft-Karp 402 augmenting path algorithm for calculate maximum cardinality matching in 403 bipartite graphs 404 - \ref lemon::PrBipartiteMatching "PrBipartiteMatching" Push-Relabel 405 algorithm for calculate maximum cardinality matching in bipartite graphs 406 - \ref lemon::MaxWeightedBipartiteMatching "MaxWeightedBipartiteMatching" 407 Successive shortest path algorithm for calculate maximum weighted matching 408 and maximum weighted bipartite matching in bipartite graph 409 - \ref lemon::MinCostMaxBipartiteMatching "MinCostMaxBipartiteMatching" 410 Successive shortest path algorithm for calculate minimum cost maximum 411 matching in bipartite graph 412 - \ref lemon::MaxMatching "MaxMatching" Edmond's blossom shrinking algorithm 413 for calculate maximum cardinality matching in general graph 414 - \ref lemon::MaxWeightedMatching "MaxWeightedMatching" Edmond's blossom 415 shrinking algorithm for calculate maximum weighted matching in general 416 graph 417 - \ref lemon::MaxWeightedPerfectMatching "MaxWeightedPerfectMatching" 418 Edmond's blossom shrinking algorithm for calculate maximum weighted 419 perfect matching in general graph 446 The matching algorithms implemented in LEMON: 447 - \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm 448 for calculating maximum cardinality matching in bipartite graphs. 449 - \ref PrBipartiteMatching Push-relabel algorithm 450 for calculating maximum cardinality matching in bipartite graphs. 451 - \ref MaxWeightedBipartiteMatching 452 Successive shortest path algorithm for calculating maximum weighted 453 matching and maximum weighted bipartite matching in bipartite graphs. 454 - \ref MinCostMaxBipartiteMatching 455 Successive shortest path algorithm for calculating minimum cost maximum 456 matching in bipartite graphs. 457 - \ref MaxMatching Edmond's blossom shrinking algorithm for calculating 458 maximum cardinality matching in general graphs. 459 - \ref MaxWeightedMatching Edmond's blossom shrinking algorithm for calculating 460 maximum weighted matching in general graphs. 461 - \ref MaxWeightedPerfectMatching 462 Edmond's blossom shrinking algorithm for calculating maximum weighted 463 perfect matching in general graphs. 420 464 421 465 \image html bipartite_matching.png … … 429 473 430 474 This group describes the algorithms for finding a minimum cost spanning 431 tree in a graph 475 tree in a graph. 432 476 */ 433 477 … … 620 664 \anchor demoprograms 621 665 622 @defgroup demos Demo programs666 @defgroup demos Demo Programs 623 667 624 668 Some demo programs are listed here. Their full source codes can be found in … … 630 674 631 675 /** 632 @defgroup tools Standalone utility applications676 @defgroup tools Standalone Utility Applications 633 677 634 678 Some utility applications are listed here. … … 638 682 */ 639 683 684 } -
lemon/Makefile.am
r409 r418 17 17 18 18 lemon_HEADERS += \ 19 lemon/adaptors.h \ 19 20 lemon/arg_parser.h \ 20 21 lemon/assert.h \ … … 61 62 lemon/bits/default_map.h \ 62 63 lemon/bits/enable_if.h \ 64 lemon/bits/graph_adaptor_extender.h \ 63 65 lemon/bits/graph_extender.h \ 64 66 lemon/bits/map_extender.h \ 65 67 lemon/bits/path_dump.h \ 66 68 lemon/bits/traits.h \ 69 lemon/bits/variant.h \ 67 70 lemon/bits/vector_map.h 68 71 -
lemon/Makefile.am
r416 r418 22 22 lemon/bfs.h \ 23 23 lemon/bin_heap.h \ 24 lemon/circulation.h \ 24 25 lemon/color.h \ 25 26 lemon/concept_check.h \ … … 37 38 lemon/hypercube_graph.h \ 38 39 lemon/kruskal.h \ 40 lemon/hao_orlin.h \ 39 41 lemon/lgf_reader.h \ 40 42 lemon/lgf_writer.h \ -
test/Makefile.am
r410 r418 17 17 test/dim_test \ 18 18 test/error_test \ 19 test/graph_adaptor_test \ 19 20 test/graph_copy_test \ 20 21 test/graph_test \ … … 45 46 test_dim_test_SOURCES = test/dim_test.cc 46 47 test_error_test_SOURCES = test/error_test.cc 48 test_graph_adaptor_test_SOURCES = test/graph_adaptor_test.cc 47 49 test_graph_copy_test_SOURCES = test/graph_copy_test.cc 48 50 test_graph_test_SOURCES = test/graph_test.cc -
test/Makefile.am
r414 r418 10 10 check_PROGRAMS += \ 11 11 test/bfs_test \ 12 test/circulation_test \ 12 13 test/counter_test \ 13 14 test/dfs_test \ … … 22 23 test/heap_test \ 23 24 test/kruskal_test \ 25 test/hao_orlin_test \ 24 26 test/maps_test \ 25 27 test/max_matching_test \ … … 37 39 38 40 test_bfs_test_SOURCES = test/bfs_test.cc 41 test_circulation_test_SOURCES = test/circulation_test.cc 39 42 test_counter_test_SOURCES = test/counter_test.cc 40 43 test_dfs_test_SOURCES = test/dfs_test.cc … … 49 52 test_heap_test_SOURCES = test/heap_test.cc 50 53 test_kruskal_test_SOURCES = test/kruskal_test.cc 54 test_hao_orlin_test_SOURCES = test/hao_orlin_test.cc 51 55 test_maps_test_SOURCES = test/maps_test.cc 52 56 test_max_matching_test_SOURCES = test/max_matching_test.cc
Note: See TracChangeset
for help on using the changeset viewer.