gravatar
kpeter (Peter Kovacs)
kpeter@inf.elte.hu
Small doc fixes and improvements (#359)
0 4 0
default
4 files changed with 22 insertions and 23 deletions:
↑ Collapse diff ↑
Ignore white space 96 line context
1 1
LEMON code without an explicit copyright notice is covered by the following
2 2
copyright/license.
3 3

	
4
Copyright (C) 2003-2009 Egervary Jeno Kombinatorikus Optimalizalasi
4
Copyright (C) 2003-2010 Egervary Jeno Kombinatorikus Optimalizalasi
5 5
Kutatocsoport (Egervary Combinatorial Optimization Research Group,
6 6
EGRES).
7 7

	
8 8
===========================================================================
9 9
Boost Software License, Version 1.0
10 10
===========================================================================
11 11

	
12 12
Permission is hereby granted, free of charge, to any person or organization
13 13
obtaining a copy of the software and accompanying documentation covered by
14 14
this license (the "Software") to use, reproduce, display, distribute,
15 15
execute, and transmit the Software, and to prepare derivative works of the
16 16
Software, and to permit third-parties to whom the Software is furnished to
17 17
do so, all subject to the following:
18 18

	
19 19
The copyright notices in the Software and this entire statement, including
20 20
the above license grant, this restriction and the following disclaimer,
21 21
must be included in all copies of the Software, in whole or in part, and
22 22
all derivative works of the Software, unless such copies or derivative
23 23
works are solely in the form of machine-executable object code generated by
24 24
a source language processor.
25 25

	
26 26
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27 27
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28 28
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
29 29
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
30 30
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
31 31
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
32 32
DEALINGS IN THE SOFTWARE.
Ignore white space 6 line context
... ...
@@ -218,104 +218,96 @@
218 218
  Dijkstra<Digraph, TimeMap> dijkstra(graph, time);
219 219
  dijkstra.run(source, target);
220 220
\endcode
221 221
We have a length map and a maximum speed map on the arcs of a digraph.
222 222
The minimum time to pass the arc can be calculated as the division of
223 223
the two maps which can be done implicitly with the \c DivMap template
224 224
class. We use the implicit minimum time map as the length map of the
225 225
\c Dijkstra algorithm.
226 226
*/
227 227

	
228 228
/**
229 229
@defgroup paths Path Structures
230 230
@ingroup datas
231 231
\brief %Path structures implemented in LEMON.
232 232

	
233 233
This group contains the path structures implemented in LEMON.
234 234

	
235 235
LEMON provides flexible data structures to work with paths.
236 236
All of them have similar interfaces and they can be copied easily with
237 237
assignment operators and copy constructors. This makes it easy and
238 238
efficient to have e.g. the Dijkstra algorithm to store its result in
239 239
any kind of path structure.
240 240

	
241 241
\sa \ref concepts::Path "Path concept"
242 242
*/
243 243

	
244 244
/**
245 245
@defgroup heaps Heap Structures
246 246
@ingroup datas
247 247
\brief %Heap structures implemented in LEMON.
248 248

	
249 249
This group contains the heap structures implemented in LEMON.
250 250

	
251 251
LEMON provides several heap classes. They are efficient implementations
252 252
of the abstract data type \e priority \e queue. They store items with
253 253
specified values called \e priorities in such a way that finding and
254 254
removing the item with minimum priority are efficient.
255 255
The basic operations are adding and erasing items, changing the priority
256 256
of an item, etc.
257 257

	
258 258
Heaps are crucial in several algorithms, such as Dijkstra and Prim.
259 259
The heap implementations have the same interface, thus any of them can be
260 260
used easily in such algorithms.
261 261

	
262 262
\sa \ref concepts::Heap "Heap concept"
263 263
*/
264 264

	
265 265
/**
266
@defgroup matrices Matrices
267
@ingroup datas
268
\brief Two dimensional data storages implemented in LEMON.
269

	
270
This group contains two dimensional data storages implemented in LEMON.
271
*/
272

	
273
/**
274 266
@defgroup auxdat Auxiliary Data Structures
275 267
@ingroup datas
276 268
\brief Auxiliary data structures implemented in LEMON.
277 269

	
278 270
This group contains some data structures implemented in LEMON in
279 271
order to make it easier to implement combinatorial algorithms.
280 272
*/
281 273

	
282 274
/**
283 275
@defgroup geomdat Geometric Data Structures
284 276
@ingroup auxdat
285 277
\brief Geometric data structures implemented in LEMON.
286 278

	
287 279
This group contains geometric data structures implemented in LEMON.
288 280

	
289 281
 - \ref lemon::dim2::Point "dim2::Point" implements a two dimensional
290 282
   vector with the usual operations.
291 283
 - \ref lemon::dim2::Box "dim2::Box" can be used to determine the
292 284
   rectangular bounding box of a set of \ref lemon::dim2::Point
293 285
   "dim2::Point"'s.
294 286
*/
295 287

	
296 288
/**
297 289
@defgroup matrices Matrices
298 290
@ingroup auxdat
299 291
\brief Two dimensional data storages implemented in LEMON.
300 292

	
301 293
This group contains two dimensional data storages implemented in LEMON.
302 294
*/
303 295

	
304 296
/**
305 297
@defgroup algs Algorithms
306 298
\brief This group contains the several algorithms
307 299
implemented in LEMON.
308 300

	
309 301
This group contains the several algorithms
310 302
implemented in LEMON.
311 303
*/
312 304

	
313 305
/**
314 306
@defgroup search Graph Search
315 307
@ingroup algs
316 308
\brief Common graph search algorithms.
317 309

	
318 310
This group contains the common graph search algorithms, namely
319 311
\e breadth-first \e search (BFS) and \e depth-first \e search (DFS)
320 312
\ref clrs01algorithms.
321 313
*/
... ...
@@ -427,109 +419,109 @@
427 419
\brief Algorithms for finding minimum cut in graphs.
428 420

	
429 421
This group contains the algorithms for finding minimum cut in graphs.
430 422

	
431 423
The \e minimum \e cut \e problem is to find a non-empty and non-complete
432 424
\f$X\f$ subset of the nodes with minimum overall capacity on
433 425
outgoing arcs. Formally, there is a \f$G=(V,A)\f$ digraph, a
434 426
\f$cap: A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum
435 427
cut is the \f$X\f$ solution of the next optimization problem:
436 428

	
437 429
\f[ \min_{X \subset V, X\not\in \{\emptyset, V\}}
438 430
    \sum_{uv\in A: u\in X, v\not\in X}cap(uv) \f]
439 431

	
440 432
LEMON contains several algorithms related to minimum cut problems:
441 433

	
442 434
- \ref HaoOrlin "Hao-Orlin algorithm" for calculating minimum cut
443 435
  in directed graphs.
444 436
- \ref NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for
445 437
  calculating minimum cut in undirected graphs.
446 438
- \ref GomoryHu "Gomory-Hu tree computation" for calculating
447 439
  all-pairs minimum cut in undirected graphs.
448 440

	
449 441
If you want to find minimum cut just between two distinict nodes,
450 442
see the \ref max_flow "maximum flow problem".
451 443
*/
452 444

	
453 445
/**
454 446
@defgroup min_mean_cycle Minimum Mean Cycle Algorithms
455 447
@ingroup algs
456 448
\brief Algorithms for finding minimum mean cycles.
457 449

	
458 450
This group contains the algorithms for finding minimum mean cycles
459 451
\ref clrs01algorithms, \ref amo93networkflows.
460 452

	
461 453
The \e minimum \e mean \e cycle \e problem is to find a directed cycle
462 454
of minimum mean length (cost) in a digraph.
463 455
The mean length of a cycle is the average length of its arcs, i.e. the
464 456
ratio between the total length of the cycle and the number of arcs on it.
465 457

	
466 458
This problem has an important connection to \e conservative \e length
467 459
\e functions, too. A length function on the arcs of a digraph is called
468 460
conservative if and only if there is no directed cycle of negative total
469 461
length. For an arbitrary length function, the negative of the minimum
470 462
cycle mean is the smallest \f$\epsilon\f$ value so that increasing the
471 463
arc lengths uniformly by \f$\epsilon\f$ results in a conservative length
472 464
function.
473 465

	
474 466
LEMON contains three algorithms for solving the minimum mean cycle problem:
475
- \ref Karp "Karp"'s original algorithm \ref amo93networkflows,
467
- \ref KarpMmc Karp's original algorithm \ref amo93networkflows,
476 468
  \ref dasdan98minmeancycle.
477
- \ref HartmannOrlin "Hartmann-Orlin"'s algorithm, which is an improved
469
- \ref HartmannOrlinMmc Hartmann-Orlin's algorithm, which is an improved
478 470
  version of Karp's algorithm \ref dasdan98minmeancycle.
479
- \ref Howard "Howard"'s policy iteration algorithm
471
- \ref HowardMmc Howard's policy iteration algorithm
480 472
  \ref dasdan98minmeancycle.
481 473

	
482
In practice, the Howard algorithm proved to be by far the most efficient
483
one, though the best known theoretical bound on its running time is
484
exponential.
485
Both Karp and HartmannOrlin algorithms run in time O(ne) and use space
486
O(n<sup>2</sup>+e), but the latter one is typically faster due to the
487
applied early termination scheme.
474
In practice, the \ref HowardMmc "Howard" algorithm proved to be by far the
475
most efficient one, though the best known theoretical bound on its running
476
time is exponential.
477
Both \ref KarpMmc "Karp" and \ref HartmannOrlinMmc "Hartmann-Orlin" algorithms
478
run in time O(ne) and use space O(n<sup>2</sup>+e), but the latter one is
479
typically faster due to the applied early termination scheme.
488 480
*/
489 481

	
490 482
/**
491 483
@defgroup matching Matching Algorithms
492 484
@ingroup algs
493 485
\brief Algorithms for finding matchings in graphs and bipartite graphs.
494 486

	
495 487
This group contains the algorithms for calculating
496 488
matchings in graphs and bipartite graphs. The general matching problem is
497 489
finding a subset of the edges for which each node has at most one incident
498 490
edge.
499 491

	
500 492
There are several different algorithms for calculate matchings in
501 493
graphs.  The matching problems in bipartite graphs are generally
502 494
easier than in general graphs. The goal of the matching optimization
503 495
can be finding maximum cardinality, maximum weight or minimum cost
504 496
matching. The search can be constrained to find perfect or
505 497
maximum cardinality matching.
506 498

	
507 499
The matching algorithms implemented in LEMON:
508 500
- \ref MaxBipartiteMatching Hopcroft-Karp augmenting path algorithm
509 501
  for calculating maximum cardinality matching in bipartite graphs.
510 502
- \ref PrBipartiteMatching Push-relabel algorithm
511 503
  for calculating maximum cardinality matching in bipartite graphs.
512 504
- \ref MaxWeightedBipartiteMatching
513 505
  Successive shortest path algorithm for calculating maximum weighted
514 506
  matching and maximum weighted bipartite matching in bipartite graphs.
515 507
- \ref MinCostMaxBipartiteMatching
516 508
  Successive shortest path algorithm for calculating minimum cost maximum
517 509
  matching in bipartite graphs.
518 510
- \ref MaxMatching Edmond's blossom shrinking algorithm for calculating
519 511
  maximum cardinality matching in general graphs.
520 512
- \ref MaxWeightedMatching Edmond's blossom shrinking algorithm for calculating
521 513
  maximum weighted matching in general graphs.
522 514
- \ref MaxWeightedPerfectMatching
523 515
  Edmond's blossom shrinking algorithm for calculating maximum weighted
524 516
  perfect matching in general graphs.
525 517
- \ref MaxFractionalMatching Push-relabel algorithm for calculating
526 518
  maximum cardinality fractional matching in general graphs.
527 519
- \ref MaxWeightedFractionalMatching Augmenting path algorithm for calculating
528 520
  maximum weighted fractional matching in general graphs.
529 521
- \ref MaxWeightedPerfectFractionalMatching
530 522
  Augmenting path algorithm for calculating maximum weighted
531 523
  perfect fractional matching in general graphs.
532 524

	
533 525
\image html matching.png
534 526
\image latex matching.eps "Min Cost Perfect Matching" width=\textwidth
535 527
*/
Ignore white space 6 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-2010
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 19
#ifndef LEMON_ARG_PARSER_H
20 20
#define LEMON_ARG_PARSER_H
21 21

	
22 22
#include <vector>
23 23
#include <map>
24 24
#include <list>
25 25
#include <string>
26 26
#include <iostream>
27 27
#include <sstream>
28 28
#include <algorithm>
29 29
#include <lemon/assert.h>
30 30

	
31 31
///\ingroup misc
32 32
///\file
33 33
///\brief A tool to parse command line arguments.
34 34

	
35 35
namespace lemon {
36 36

	
37 37
  ///Exception used by ArgParser
38

	
39
  ///Exception used by ArgParser.
40
  ///
38 41
  class ArgParserException : public Exception {
39 42
  public:
43
    /// Reasons for failure
44

	
45
    /// Reasons for failure.
46
    ///
40 47
    enum Reason {
41
      HELP,         /// <tt>--help</tt> option was given
42
      UNKNOWN_OPT,  /// Unknown option was given
43
      INVALID_OPT   /// Invalid combination of options
48
      HELP,         ///< <tt>--help</tt> option was given.
49
      UNKNOWN_OPT,  ///< Unknown option was given.
50
      INVALID_OPT   ///< Invalid combination of options.
44 51
    };
45 52

	
46 53
  private:
47 54
    Reason _reason;
48 55

	
49 56
  public:
50 57
    ///Constructor
51 58
    ArgParserException(Reason r) throw() : _reason(r) {}
52 59
    ///Virtual destructor
53 60
    virtual ~ArgParserException() throw() {}
54 61
    ///A short description of the exception
55 62
    virtual const char* what() const throw() {
56 63
      switch(_reason)
57 64
        {
58 65
        case HELP:
59 66
          return "lemon::ArgParseException: ask for help";
60 67
          break;
61 68
        case UNKNOWN_OPT:
62 69
          return "lemon::ArgParseException: unknown option";
63 70
          break;
64 71
        case INVALID_OPT:
65 72
          return "lemon::ArgParseException: invalid combination of options";
66 73
          break;
67 74
        }
68 75
      return "";
69 76
    }
70 77
    ///Return the reason for the failure
71 78
    Reason reason() const {return _reason; }
72 79
  };
73 80

	
74 81

	
75 82
  ///Command line arguments parser
76 83

	
77 84
  ///\ingroup misc
78 85
  ///Command line arguments parser.
79 86
  ///
80 87
  ///For a complete example see the \ref arg_parser_demo.cc demo file.
81 88
  class ArgParser {
82 89

	
83 90
    static void _showHelp(void *p);
84 91
  protected:
85 92

	
86 93
    int _argc;
87 94
    const char * const *_argv;
88 95

	
89 96
    enum OptType { UNKNOWN=0, BOOL=1, STRING=2, DOUBLE=3, INTEGER=4, FUNC=5 };
90 97

	
91 98
    class ParData {
Ignore white space 6 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-2010
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 19
#ifndef LEMON_HARTMANN_ORLIN_MMC_H
20 20
#define LEMON_HARTMANN_ORLIN_MMC_H
21 21

	
22 22
/// \ingroup min_mean_cycle
23 23
///
24 24
/// \file
25 25
/// \brief Hartmann-Orlin's algorithm for finding a minimum mean cycle.
26 26

	
27 27
#include <vector>
28 28
#include <limits>
29 29
#include <lemon/core.h>
30 30
#include <lemon/path.h>
31 31
#include <lemon/tolerance.h>
32 32
#include <lemon/connectivity.h>
33 33

	
34 34
namespace lemon {
35 35

	
36 36
  /// \brief Default traits class of HartmannOrlinMmc class.
37 37
  ///
38 38
  /// Default traits class of HartmannOrlinMmc class.
39 39
  /// \tparam GR The type of the digraph.
40 40
  /// \tparam CM The type of the cost map.
41
  /// It must conform to the \ref concepts::Rea_data "Rea_data" concept.
41
  /// It must conform to the \ref concepts::ReadMap "ReadMap" concept.
42 42
#ifdef DOXYGEN
43 43
  template <typename GR, typename CM>
44 44
#else
45 45
  template <typename GR, typename CM,
46 46
    bool integer = std::numeric_limits<typename CM::Value>::is_integer>
47 47
#endif
48 48
  struct HartmannOrlinMmcDefaultTraits
49 49
  {
50 50
    /// The type of the digraph
51 51
    typedef GR Digraph;
52 52
    /// The type of the cost map
53 53
    typedef CM CostMap;
54 54
    /// The type of the arc costs
55 55
    typedef typename CostMap::Value Cost;
56 56

	
57 57
    /// \brief The large cost type used for internal computations
58 58
    ///
59 59
    /// The large cost type used for internal computations.
60 60
    /// It is \c long \c long if the \c Cost type is integer,
61 61
    /// otherwise it is \c double.
62 62
    /// \c Cost must be convertible to \c LargeCost.
63 63
    typedef double LargeCost;
64 64

	
65 65
    /// The tolerance type used for internal computations
66 66
    typedef lemon::Tolerance<LargeCost> Tolerance;
67 67

	
68 68
    /// \brief The path type of the found cycles
69 69
    ///
70 70
    /// The path type of the found cycles.
71 71
    /// It must conform to the \ref lemon::concepts::Path "Path" concept
72 72
    /// and it must have an \c addFront() function.
73 73
    typedef lemon::Path<Digraph> Path;
74 74
  };
75 75

	
76 76
  // Default traits class for integer cost types
77 77
  template <typename GR, typename CM>
78 78
  struct HartmannOrlinMmcDefaultTraits<GR, CM, true>
79 79
  {
80 80
    typedef GR Digraph;
81 81
    typedef CM CostMap;
82 82
    typedef typename CostMap::Value Cost;
83 83
#ifdef LEMON_HAVE_LONG_LONG
84 84
    typedef long long LargeCost;
85 85
#else
86 86
    typedef long LargeCost;
87 87
#endif
88 88
    typedef lemon::Tolerance<LargeCost> Tolerance;
89 89
    typedef lemon::Path<Digraph> Path;
90 90
  };
91 91

	
92 92

	
93 93
  /// \addtogroup min_mean_cycle
94 94
  /// @{
95 95

	
96 96
  /// \brief Implementation of the Hartmann-Orlin algorithm for finding
97 97
  /// a minimum mean cycle.
98 98
  ///
99 99
  /// This class implements the Hartmann-Orlin algorithm for finding
100 100
  /// a directed cycle of minimum mean cost in a digraph
101 101
  /// \ref amo93networkflows, \ref dasdan98minmeancycle.
102
  /// It is an improved version of \ref Karp "Karp"'s original algorithm,
102
  /// It is an improved version of \ref KarpMmc "Karp"'s original algorithm,
103 103
  /// it applies an efficient early termination scheme.
104 104
  /// It runs in time O(ne) and uses space O(n<sup>2</sup>+e).
105 105
  ///
106 106
  /// \tparam GR The type of the digraph the algorithm runs on.
107 107
  /// \tparam CM The type of the cost map. The default
108 108
  /// map type is \ref concepts::Digraph::ArcMap "GR::ArcMap<int>".
109 109
  /// \tparam TR The traits class that defines various types used by the
110 110
  /// algorithm. By default, it is \ref HartmannOrlinMmcDefaultTraits
111 111
  /// "HartmannOrlinMmcDefaultTraits<GR, CM>".
112 112
  /// In most cases, this parameter should not be set directly,
113 113
  /// consider to use the named template parameters instead.
114 114
#ifdef DOXYGEN
115 115
  template <typename GR, typename CM, typename TR>
116 116
#else
117 117
  template < typename GR,
118 118
             typename CM = typename GR::template ArcMap<int>,
119 119
             typename TR = HartmannOrlinMmcDefaultTraits<GR, CM> >
120 120
#endif
121 121
  class HartmannOrlinMmc
122 122
  {
123 123
  public:
124 124

	
125 125
    /// The type of the digraph
126 126
    typedef typename TR::Digraph Digraph;
127 127
    /// The type of the cost map
128 128
    typedef typename TR::CostMap CostMap;
129 129
    /// The type of the arc costs
130 130
    typedef typename TR::Cost Cost;
131 131

	
132 132
    /// \brief The large cost type
133 133
    ///
134 134
    /// The large cost type used for internal computations.
135 135
    /// By default, it is \c long \c long if the \c Cost type is integer,
136 136
    /// otherwise it is \c double.
137 137
    typedef typename TR::LargeCost LargeCost;
138 138

	
139 139
    /// The tolerance type
140 140
    typedef typename TR::Tolerance Tolerance;
141 141

	
142 142
    /// \brief The path type of the found cycles
143 143
    ///
144 144
    /// The path type of the found cycles.
145 145
    /// Using the \ref HartmannOrlinMmcDefaultTraits "default traits class",
146 146
    /// it is \ref lemon::Path "Path<Digraph>".
147 147
    typedef typename TR::Path Path;
148 148

	
149 149
    /// The \ref HartmannOrlinMmcDefaultTraits "traits class" of the algorithm
150 150
    typedef TR Traits;
0 comments (0 inline)