gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Improvements in groups.dox (#188) - Unify the notations used for formulas. - Add 'namespace lemon {...}' to simplify the references. - Improved doc for algorithm groups. - Extend the doc of the "shortest path" and "minimum cost flow" modules.
0 1 0
default
1 file changed with 103 insertions and 58 deletions:
↑ Collapse diff ↑
Ignore white space 48 line context
1 1
/* -*- mode: C++; indent-tabs-mode: nil; -*-
2 2
 *
3 3
 * This file is a part of LEMON, a generic C++ optimization library.
4 4
 *
5 5
 * Copyright (C) 2003-2008
6 6
 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 7
 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8 8
 *
9 9
 * Permission to use, modify and distribute this software is granted
10 10
 * provided that this copyright notice appears in all copies. For
11 11
 * precise terms see the accompanying LICENSE file.
12 12
 *
13 13
 * This software is provided "AS IS" with no warranty of any kind,
14 14
 * express or implied, and with no claim as to its suitability for any
15 15
 * purpose.
16 16
 *
17 17
 */
18 18

	
19
namespace lemon {
20

	
19 21
/**
20 22
@defgroup datas Data Structures
21 23
This group describes the several data structures implemented in LEMON.
22 24
*/
23 25

	
24 26
/**
25 27
@defgroup graphs Graph Structures
26 28
@ingroup datas
27 29
\brief Graph structures implemented in LEMON.
28 30

	
29 31
The implementation of combinatorial algorithms heavily relies on
30 32
efficient graph implementations. LEMON offers data structures which are
31 33
planned to be easily used in an experimental phase of implementation studies,
32 34
and thereafter the program code can be made efficient by small modifications.
33 35

	
34 36
The most efficient implementation of diverse applications require the
35 37
usage of different physical graph implementations. These differences
36 38
appear in the size of graph we require to handle, memory or time usage
37 39
limitations or in the set of operations through which the graph can be
38 40
accessed.  LEMON provides several physical graph structures to meet
39 41
the diverging requirements of the possible users.  In order to save on
40 42
running time or on memory usage, some structures may fail to provide
41 43
some graph features like arc/edge or node deletion.
42 44

	
... ...
@@ -67,60 +69,63 @@
67 69
This group describes some graph types between real graphs and graph adaptors.
68 70
These classes wrap graphs to give new functionality as the adaptors do it.
69 71
On the other hand they are not light-weight structures as the adaptors.
70 72
*/
71 73

	
72 74
/**
73 75
@defgroup maps Maps
74 76
@ingroup datas
75 77
\brief Map structures implemented in LEMON.
76 78

	
77 79
This group describes the map structures implemented in LEMON.
78 80

	
79 81
LEMON provides several special purpose maps and map adaptors that e.g. combine
80 82
new maps from existing ones.
81 83

	
82 84
<b>See also:</b> \ref map_concepts "Map Concepts".
83 85
*/
84 86

	
85 87
/**
86 88
@defgroup graph_maps Graph Maps
87 89
@ingroup maps
88 90
\brief Special graph-related maps.
89 91

	
90 92
This group describes maps that are specifically designed to assign
91
values to the nodes and arcs of graphs.
93
values to the nodes and arcs/edges of graphs.
94

	
95
If you are looking for the standard graph maps (\c NodeMap, \c ArcMap,
96
\c EdgeMap), see the \ref graph_concepts "Graph Structure Concepts".
92 97
*/
93 98

	
94 99
/**
95 100
\defgroup map_adaptors Map Adaptors
96 101
\ingroup maps
97 102
\brief Tools to create new maps from existing ones
98 103

	
99 104
This group describes map adaptors that are used to create "implicit"
100 105
maps from other maps.
101 106

	
102
Most of them are \ref lemon::concepts::ReadMap "read-only maps".
107
Most of them are \ref concepts::ReadMap "read-only maps".
103 108
They can make arithmetic and logical operations between one or two maps
104 109
(negation, shifting, addition, multiplication, logical 'and', 'or',
105 110
'not' etc.) or e.g. convert a map to another one of different Value type.
106 111

	
107 112
The typical usage of this classes is passing implicit maps to
108 113
algorithms.  If a function type algorithm is called then the function
109 114
type map adaptors can be used comfortable. For example let's see the
110 115
usage of map adaptors with the \c graphToEps() function.
111 116
\code
112 117
  Color nodeColor(int deg) {
113 118
    if (deg >= 2) {
114 119
      return Color(0.5, 0.0, 0.5);
115 120
    } else if (deg == 1) {
116 121
      return Color(1.0, 0.5, 1.0);
117 122
    } else {
118 123
      return Color(0.0, 0.0, 0.0);
119 124
    }
120 125
  }
121 126

	
122 127
  Digraph::NodeMap<int> degree_map(graph);
123 128

	
124 129
  graphToEps(graph, "graph.eps")
125 130
    .coords(coords).scaleToA4().undirected()
126 131
    .nodeColors(composeMap(functorToMap(nodeColor), degree_map))
... ...
@@ -180,203 +185,242 @@
180 185

	
181 186
/**
182 187
@defgroup auxdat Auxiliary Data Structures
183 188
@ingroup datas
184 189
\brief Auxiliary data structures implemented in LEMON.
185 190

	
186 191
This group describes some data structures implemented in LEMON in
187 192
order to make it easier to implement combinatorial algorithms.
188 193
*/
189 194

	
190 195
/**
191 196
@defgroup algs Algorithms
192 197
\brief This group describes the several algorithms
193 198
implemented in LEMON.
194 199

	
195 200
This group describes the several algorithms
196 201
implemented in LEMON.
197 202
*/
198 203

	
199 204
/**
200 205
@defgroup search Graph Search
201 206
@ingroup algs
202 207
\brief Common graph search algorithms.
203 208

	
204
This group describes the common graph search algorithms like
205
Breadth-First Search (BFS) and Depth-First Search (DFS).
209
This group describes the common graph search algorithms, namely
210
\e breadth-first \e search (BFS) and \e depth-first \e search (DFS).
206 211
*/
207 212

	
208 213
/**
209 214
@defgroup shortest_path Shortest Path Algorithms
210 215
@ingroup algs
211 216
\brief Algorithms for finding shortest paths.
212 217

	
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.
214 232
*/
215 233

	
216 234
/**
217 235
@defgroup max_flow Maximum Flow Algorithms
218 236
@ingroup algs
219 237
\brief Algorithms for finding maximum flows.
220 238

	
221 239
This group describes the algorithms for finding maximum flows and
222 240
feasible circulations.
223 241

	
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.
229 248

	
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]
234 253

	
235 254
LEMON contains several algorithms for solving maximum flow problems:
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.
240 259

	
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.
245 264
*/
246 265

	
247 266
/**
248 267
@defgroup min_cost_flow Minimum Cost Flow Algorithms
249 268
@ingroup algs
250 269

	
251 270
\brief Algorithms for finding minimum cost flows and circulations.
252 271

	
253 272
This group describes the algorithms for finding minimum cost flows and
254 273
circulations.
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.
255 301
*/
256 302

	
257 303
/**
258 304
@defgroup min_cut Minimum Cut Algorithms
259 305
@ingroup algs
260 306

	
261 307
\brief Algorithms for finding minimum cut in graphs.
262 308

	
263 309
This group describes the algorithms for finding minimum cut in graphs.
264 310

	
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
269 315
cut is the \f$X\f$ solution of the next optimization problem:
270 316

	
271 317
\f[ \min_{X \subset V, X\not\in \{\emptyset, V\}}
272
\sum_{uv\in A, u\in X, v\not\in X}c_{uv}\f]
318
    \sum_{uv\in A, u\in X, v\not\in X}cap(uv) \f]
273 319

	
274 320
LEMON contains several algorithms related to minimum cut problems:
275 321

	
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.
282 328

	
283 329
If you want to find minimum cut just between two distinict nodes,
284
please see the \ref max_flow "Maximum Flow page".
330
see the \ref max_flow "maximum flow problem".
285 331
*/
286 332

	
287 333
/**
288 334
@defgroup graph_prop Connectivity and Other Graph Properties
289 335
@ingroup algs
290 336
\brief Algorithms for discovering the graph properties
291 337

	
292 338
This group describes the algorithms for discovering the graph properties
293 339
like connectivity, bipartiteness, euler property, simplicity etc.
294 340

	
295 341
\image html edge_biconnected_components.png
296 342
\image latex edge_biconnected_components.eps "bi-edge-connected components" width=\textwidth
297 343
*/
298 344

	
299 345
/**
300 346
@defgroup planar Planarity Embedding and Drawing
301 347
@ingroup algs
302 348
\brief Algorithms for planarity checking, embedding and drawing
303 349

	
304 350
This group describes the algorithms for planarity checking,
305 351
embedding and drawing.
306 352

	
307 353
\image html planar.png
308 354
\image latex planar.eps "Plane graph" width=\textwidth
309 355
*/
310 356

	
311 357
/**
312 358
@defgroup matching Matching Algorithms
313 359
@ingroup algs
314 360
\brief Algorithms for finding matchings in graphs and bipartite graphs.
315 361

	
316 362
This group contains algorithm objects and functions to calculate
317 363
matchings in graphs and bipartite graphs. The general matching problem is
318 364
finding a subset of the arcs which does not shares common endpoints.
319 365

	
320 366
There are several different algorithms for calculate matchings in
321 367
graphs.  The matching problems in bipartite graphs are generally
322 368
easier than in general graphs. The goal of the matching optimization
323
can be the finding maximum cardinality, maximum weight or minimum cost
369
can be finding maximum cardinality, maximum weight or minimum cost
324 370
matching. The search can be constrained to find perfect or
325 371
maximum cardinality matching.
326 372

	
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.
347 391

	
348 392
\image html bipartite_matching.png
349 393
\image latex bipartite_matching.eps "Bipartite Matching" width=\textwidth
350 394
*/
351 395

	
352 396
/**
353 397
@defgroup spantree Minimum Spanning Tree Algorithms
354 398
@ingroup algs
355 399
\brief Algorithms for finding a minimum cost spanning tree in a graph.
356 400

	
357 401
This group describes the algorithms for finding a minimum cost spanning
358
tree in a graph
402
tree in a graph.
359 403
*/
360 404

	
361 405
/**
362 406
@defgroup auxalg Auxiliary Algorithms
363 407
@ingroup algs
364 408
\brief Auxiliary algorithms implemented in LEMON.
365 409

	
366 410
This group describes some algorithms implemented in LEMON
367 411
in order to make it easier to implement complex algorithms.
368 412
*/
369 413

	
370 414
/**
371 415
@defgroup approx Approximation Algorithms
372 416
@ingroup algs
373 417
\brief Approximation algorithms.
374 418

	
375 419
This group describes the approximation and heuristic algorithms
376 420
implemented in LEMON.
377 421
*/
378 422

	
379 423
/**
380 424
@defgroup gen_opt_group General Optimization Tools
381 425
\brief This group describes some general optimization frameworks
382 426
implemented in LEMON.
... ...
@@ -525,42 +569,43 @@
525 569

	
526 570
- Finally, They can serve as a skeleton of a new implementation of a concept.
527 571
*/
528 572

	
529 573
/**
530 574
@defgroup graph_concepts Graph Structure Concepts
531 575
@ingroup concept
532 576
\brief Skeleton and concept checking classes for graph structures
533 577

	
534 578
This group describes the skeletons and concept checking classes of LEMON's
535 579
graph structures and helper classes used to implement these.
536 580
*/
537 581

	
538 582
/**
539 583
@defgroup map_concepts Map Concepts
540 584
@ingroup concept
541 585
\brief Skeleton and concept checking classes for maps
542 586

	
543 587
This group describes the skeletons and concept checking classes of maps.
544 588
*/
545 589

	
546 590
/**
547 591
\anchor demoprograms
548 592

	
549
@defgroup demos Demo programs
593
@defgroup demos Demo Programs
550 594

	
551 595
Some demo programs are listed here. Their full source codes can be found in
552 596
the \c demo subdirectory of the source tree.
553 597

	
554 598
It order to compile them, use <tt>--enable-demo</tt> configure option when
555 599
build the library.
556 600
*/
557 601

	
558 602
/**
559
@defgroup tools Standalone utility applications
603
@defgroup tools Standalone Utility Applications
560 604

	
561 605
Some utility applications are listed here.
562 606

	
563 607
The standard compilation procedure (<tt>./configure;make</tt>) will compile
564 608
them, as well.
565 609
*/
566 610

	
611
}
0 comments (0 inline)