doc/groups.dox
author deba
Thu, 01 Mar 2007 16:47:49 +0000
changeset 2382 678bea23ed75
parent 2376 0ed45a6c74b1
child 2391 14a343be7a5a
permissions -rw-r--r--
2-approximation of Steiner-tree problem
alpar@814
     1
alpar@678
     2
/**
alpar@678
     3
@defgroup datas Data Structures
alpar@921
     4
This group describes the several graph structures implemented in LEMON.
alpar@678
     5
*/
alpar@430
     6
alpar@678
     7
/**
alpar@678
     8
@defgroup graphs Graph Structures
alpar@678
     9
@ingroup datas
alpar@921
    10
\brief Graph structures implemented in LEMON.
alpar@430
    11
marci@1172
    12
The implementation of combinatorial algorithms heavily relies on 
marci@1172
    13
efficient graph implementations. LEMON offers data structures which are 
marci@1172
    14
planned to be easily used in an experimental phase of implementation studies, 
marci@1172
    15
and thereafter the program code can be made efficient by small modifications. 
alpar@430
    16
deba@2084
    17
The most efficient implementation of diverse applications require the
deba@2084
    18
usage of different physical graph implementations. These differences
deba@2084
    19
appear in the size of graph we require to handle, memory or time usage
deba@2084
    20
limitations or in the set of operations through which the graph can be
deba@2084
    21
accessed.  LEMON provides several physical graph structures to meet
deba@2084
    22
the diverging requirements of the possible users.  In order to save on
deba@2084
    23
running time or on memory usage, some structures may fail to provide
deba@2084
    24
some graph features like edge or node deletion.
marci@1172
    25
marci@1172
    26
Alteration of standard containers need a very limited number of 
marci@1172
    27
operations, these together satisfy the everyday requirements. 
alpar@2117
    28
In the case of graph structures, different operations are needed which do 
alpar@2006
    29
not alter the physical graph, but gives another view. If some nodes or 
marci@1172
    30
edges have to be hidden or the reverse oriented graph have to be used, then 
alpar@2117
    31
this is the case. It also may happen that in a flow implementation 
alpar@2006
    32
the residual graph can be accessed by another algorithm, or a node-set 
alpar@2006
    33
is to be shrunk for another algorithm. 
marci@1172
    34
LEMON also provides a variety of graphs for these requirements called 
alpar@1401
    35
\ref graph_adaptors "graph adaptors". Adaptors cannot be used alone but only 
marci@1172
    36
in conjunction with other graph representation. 
alpar@430
    37
alpar@678
    38
You are free to use the graph structure that fit your requirements
alpar@678
    39
the best, most graph algorithms and auxiliary data structures can be used
marci@1172
    40
with any graph structures. 
alpar@678
    41
*/
alpar@430
    42
alpar@678
    43
/**
deba@1866
    44
@defgroup semi_adaptors Semi-Adaptors Classes for Graphs
deba@1866
    45
@ingroup graphs
deba@1866
    46
\brief Graph types between real graphs and graph adaptors.
deba@1866
    47
alpar@2117
    48
Graph types between real graphs and graph adaptors. These classes wrap
alpar@2117
    49
graphs to give new functionality as the adaptors do it. On the other
alpar@2117
    50
hand they are not light-weight structures as the adaptors.
deba@1866
    51
*/
deba@1866
    52
deba@1866
    53
/**
alpar@1043
    54
@defgroup maps Maps 
alpar@1043
    55
@ingroup datas
alpar@1043
    56
\brief Some special purpose map to make life easier.
alpar@1043
    57
alpar@1043
    58
LEMON provides several special maps that e.g. combine
alpar@1043
    59
new maps from existing ones.
alpar@1043
    60
*/
alpar@1043
    61
alpar@1402
    62
/**
alpar@1402
    63
@defgroup graph_maps Graph Maps 
alpar@1402
    64
@ingroup maps
alpar@1402
    65
\brief Special Graph-Related Maps.
alpar@1402
    66
alpar@1402
    67
These maps are specifically designed to assign values to the nodes and edges of
alpar@1402
    68
graphs.
alpar@1402
    69
*/
alpar@1402
    70
alpar@1402
    71
alpar@1402
    72
/**
alpar@1402
    73
\defgroup map_adaptors Map Adaptors
alpar@1402
    74
\ingroup maps
alpar@1402
    75
\brief Tools to create new maps from existing ones
alpar@1402
    76
alpar@1402
    77
Map adaptors are used to create "implicit" maps from other maps.
alpar@1402
    78
alpar@2260
    79
Most of them are \ref lemon::concepts::ReadMap "ReadMap"s. They can
alpar@2117
    80
make arithmetic operations between one or two maps (negation, scaling,
alpar@1402
    81
addition, multiplication etc.) or e.g. convert a map to another one
alpar@1402
    82
of different Value type.
alpar@1402
    83
*/
alpar@1402
    84
alpar@1043
    85
/**
alpar@2072
    86
@defgroup matrices Matrices 
alpar@2072
    87
@ingroup datas
alpar@2072
    88
\brief Two dimensional data storages.
alpar@2072
    89
deba@2084
    90
Two dimensional data storages.
alpar@2072
    91
*/
alpar@2072
    92
deba@2084
    93
/**
deba@2084
    94
@defgroup paths Path Structures
deba@2084
    95
@ingroup datas
deba@2084
    96
\brief Path structures implemented in LEMON.
deba@2084
    97
deba@2084
    98
LEMON provides flexible data structures
deba@2084
    99
to work with paths.
deba@2084
   100
deba@2084
   101
All of them have the same interface, especially they can be built or extended
deba@2084
   102
using a standard Builder subclass. This make is easy to have e.g. the Dijkstra
deba@2084
   103
algorithm to store its result in any kind of path structure.
deba@2084
   104
alpar@2260
   105
\sa lemon::concepts::Path
deba@2084
   106
deba@2084
   107
*/
alpar@2072
   108
alpar@2072
   109
/**
alpar@678
   110
@defgroup auxdat Auxiliary Data Structures
alpar@678
   111
@ingroup datas
alpar@921
   112
\brief Some data structures implemented in LEMON.
alpar@406
   113
alpar@921
   114
This group describes the data structures implemented in LEMON in
alpar@678
   115
order to make it easier to implement combinatorial algorithms.
alpar@678
   116
*/
alpar@406
   117
alpar@785
   118
alpar@785
   119
/**
deba@2084
   120
@defgroup algs Algorithms
deba@2084
   121
\brief This group describes the several algorithms
alpar@921
   122
implemented in LEMON.
alpar@947
   123
deba@2084
   124
This group describes the several algorithms
alpar@947
   125
implemented in LEMON.
alpar@947
   126
*/
alpar@947
   127
alpar@947
   128
/**
deba@2376
   129
@defgroup search Graph Search
deba@2084
   130
@ingroup algs
deba@2376
   131
\brief This group contains the common graph
deba@2376
   132
search algorithms.
alpar@947
   133
deba@2376
   134
This group contains the common graph
deba@2376
   135
search algorithms like Bfs and Dfs.
alpar@678
   136
*/
alpar@678
   137
alpar@678
   138
/**
deba@2376
   139
@defgroup shortest_path Shortest Path algorithms
deba@2084
   140
@ingroup algs
alpar@758
   141
\brief This group describes the algorithms
deba@2376
   142
for finding shortest paths.
deba@2060
   143
deba@2376
   144
This group describes the algorithms for finding shortest paths in
deba@2376
   145
graphs.
deba@2376
   146
deba@2376
   147
*/
deba@2376
   148
deba@2376
   149
/** 
deba@2376
   150
@defgroup max_flow Maximum Flow algorithms 
deba@2376
   151
@ingroup algs 
deba@2376
   152
\brief This group describes the algorithms for finding maximum flows.
deba@2376
   153
deba@2377
   154
This group describes the algorithms for finding maximum flows and
deba@2377
   155
feasible circulations.
deba@2060
   156
deba@2060
   157
\image html flow.png
deba@2060
   158
\image latex flow.eps "Graph flow" width=\textwidth
alpar@678
   159
*/
alpar@678
   160
alpar@678
   161
/**
deba@2376
   162
@defgroup min_cost_flow Minimum Cost Flow algorithms
deba@2376
   163
@ingroup algs
deba@2376
   164
deba@2376
   165
\brief This group describes the algorithms
deba@2376
   166
for finding minimum cost flows and circulations.
deba@2376
   167
deba@2376
   168
This group describes the algorithms for finding minimum cost flows and
deba@2376
   169
circulations.  
deba@2376
   170
*/
deba@2376
   171
deba@2376
   172
/**
deba@2376
   173
@defgroup min_cut Minimum Cut algorithms
deba@2376
   174
@ingroup algs
deba@2376
   175
\brief This group describes the algorithms
deba@2376
   176
for finding minimum cut in graphs.
deba@2376
   177
deba@2376
   178
This group describes the algorithms
deba@2376
   179
for finding minimum cut in graphs.
deba@2376
   180
*/
deba@2376
   181
deba@2376
   182
/**
deba@1750
   183
@defgroup topology Topology related algorithms
deba@2084
   184
@ingroup algs
deba@1750
   185
\brief This group describes the algorithms
deba@1750
   186
for discover the topology of the graphs.
deba@2060
   187
deba@2060
   188
This group describes the algorithms
deba@2060
   189
for discover the topology of the graphs.
deba@2060
   190
deba@2060
   191
\image html edge_biconnected_components.png
deba@2060
   192
\image latex edge_biconnected_components.eps "bi-edge-connected components" width=\textwidth
deba@1750
   193
*/
deba@1750
   194
deba@1750
   195
/**
deba@2376
   196
@defgroup matching Matching algorithms 
deba@2084
   197
@ingroup algs
deba@2042
   198
\brief This group describes the algorithms
deba@2042
   199
for find matchings in graphs and bipartite graphs.
deba@2060
   200
deba@2060
   201
This group provides some algorithm objects and function
deba@2060
   202
to calculate matchings in graphs and bipartite graphs.
deba@2060
   203
deba@2060
   204
\image html bipartite_matching.png
deba@2060
   205
\image latex bipartite_matching.eps "Bipartite Matching" width=\textwidth
deba@2060
   206
deba@2042
   207
*/
deba@2042
   208
deba@2042
   209
/**
deba@2376
   210
@defgroup spantree Minimum Spanning Tree algorithms
deba@2084
   211
@ingroup algs
alpar@2117
   212
\brief This group contains the algorithms for finding a minimum cost spanning
deba@2084
   213
tree in a graph
deba@2084
   214
alpar@2117
   215
This group contains the algorithms for finding a minimum cost spanning
deba@2084
   216
tree in a graph
deba@2084
   217
*/
deba@2084
   218
deba@2084
   219
deba@2084
   220
/**
deba@2376
   221
@defgroup auxalg Auxiliary algorithms
deba@2084
   222
@ingroup algs
deba@2084
   223
\brief Some algorithms implemented in LEMON.
deba@2084
   224
deba@2084
   225
This group describes the algorithms in LEMON in order to make 
deba@2084
   226
it easier to implement complex algorithms.
deba@2376
   227
*/
deba@2084
   228
deba@2376
   229
/**
deba@2376
   230
@defgroup approx Approximation algorithms
deba@2376
   231
\brief Approximation algorithms
deba@2376
   232
deba@2376
   233
Approximation and heuristic algorithms
deba@2084
   234
*/
deba@2084
   235
deba@2084
   236
/**
deba@2084
   237
@defgroup gen_opt_group General Optimization Tools
deba@2084
   238
\brief This group describes some general optimization frameworks
deba@2084
   239
implemented in LEMON.
deba@2084
   240
deba@2084
   241
This group describes some general optimization frameworks
deba@2084
   242
implemented in LEMON.
deba@2084
   243
alpar@1151
   244
*/
alpar@1151
   245
deba@2370
   246
/**
deba@2371
   247
@defgroup lp_group Lp and Mip solvers
deba@2370
   248
@ingroup gen_opt_group
deba@2370
   249
\brief Lp and Mip solver interfaces for LEMON.
deba@2370
   250
deba@2370
   251
This group describes Lp and Mip solver interfaces for LEMON. The
deba@2370
   252
various LP solvers could be used in the same manner with this
deba@2370
   253
interface.
deba@2370
   254
deba@2370
   255
*/
deba@2370
   256
deba@2368
   257
/** 
deba@2370
   258
@defgroup lp_utils Tools for Lp and Mip solvers 
deba@2370
   259
@ingroup lp_group
deba@2370
   260
\brief This group adds some helper tools to the Lp and Mip solvers
deba@2370
   261
implemented in LEMON.
deba@2368
   262
deba@2368
   263
This group adds some helper tools to general optimization framework
deba@2368
   264
implemented in LEMON.
deba@2368
   265
*/
deba@2368
   266
alpar@1151
   267
/**
deba@2370
   268
@defgroup metah Metaheuristics
deba@2370
   269
@ingroup gen_opt_group
deba@2370
   270
\brief Metaheuristics for LEMON library.
deba@2370
   271
deba@2370
   272
This group contains some metaheuristic optimization tools.
deba@2370
   273
*/
deba@2370
   274
deba@2370
   275
/**
deba@2376
   276
@defgroup utils Tools and Utilities 
deba@2376
   277
\brief Tools and Utilities for Programming in LEMON
deba@2376
   278
deba@2376
   279
Tools and Utilities for Programming in LEMON
deba@2376
   280
*/
deba@2376
   281
deba@2376
   282
/**
deba@2376
   283
@defgroup gutils Basic Graph Utilities
deba@2376
   284
@ingroup utils
deba@2376
   285
\brief This group describes some simple basic graph utilities.
deba@2376
   286
deba@2376
   287
This group describes some simple basic graph utilities.
deba@2376
   288
*/
deba@2376
   289
deba@2376
   290
/**
alpar@678
   291
@defgroup misc Miscellaneous Tools
deba@2376
   292
@ingroup utils
alpar@678
   293
Here you can find several useful tools for development,
alpar@678
   294
debugging and testing.
alpar@678
   295
*/
alpar@678
   296
deba@2376
   297
alpar@678
   298
/**
alpar@1847
   299
@defgroup timecount Time measuring and Counting
alpar@1847
   300
@ingroup misc
alpar@1847
   301
Here you can find simple tools for measuring the performance
alpar@1847
   302
of algorithms.
alpar@1847
   303
*/
alpar@1847
   304
alpar@1847
   305
/**
deba@2376
   306
@defgroup graphbits Tools for Graph Implementation
deba@2376
   307
@ingroup utils
deba@2376
   308
\brief Tools to Make It Easier to Make Graphs.
deba@2376
   309
deba@2376
   310
This group describes the tools that makes it easier to make graphs and
deba@2376
   311
the maps that dynamically update with the graph changes.
deba@2376
   312
*/
deba@2376
   313
deba@2376
   314
/**
deba@2376
   315
@defgroup exceptions Exceptions
deba@2376
   316
@ingroup utils
deba@2376
   317
This group contains the exceptions thrown by LEMON library
deba@2376
   318
*/
deba@2376
   319
deba@2376
   320
/**
deba@2016
   321
@defgroup io_group Input-Output
deba@2084
   322
\brief Several Graph Input-Output methods
deba@2084
   323
deba@2084
   324
Here you can find tools for importing and exporting graphs 
deba@2084
   325
and graph related data. Now it supports the LEMON format, the
alpar@2117
   326
\c DIMACS format and the encapsulated postscript format.
deba@2084
   327
*/
deba@2084
   328
deba@2084
   329
/**
deba@2084
   330
@defgroup lemon_io Lemon Input-Output
deba@2084
   331
@ingroup io_group
deba@2084
   332
\brief Reading and writing LEMON format
deba@2084
   333
deba@2084
   334
Methods for reading and writing LEMON format. More about this
deba@2084
   335
format you can find on the \ref graph-io-page "Graph Input-Output"
deba@2084
   336
tutorial pages.
alpar@1287
   337
*/
alpar@1287
   338
alpar@1287
   339
/**
deba@2016
   340
@defgroup section_io Section readers and writers
deba@2084
   341
@ingroup lemon_io
deba@2016
   342
\brief Section readers and writers for lemon Input-Output.
deba@2016
   343
deba@2016
   344
Here you can find which section readers and writers can attach to
deba@2016
   345
the LemonReader and LemonWriter.
deba@2016
   346
*/
deba@2016
   347
deba@2016
   348
/**
deba@2016
   349
@defgroup item_io Item Readers and Writers
deba@2084
   350
@ingroup lemon_io
deba@2016
   351
\brief Item readers and writers for lemon Input-Output.
deba@2016
   352
deba@2016
   353
The Input-Output classes can handle more data type by example
deba@2016
   354
as map or attribute value. Each of these should be written and
deba@2016
   355
read some way. The module make possible to do this.  
deba@2016
   356
*/
deba@2016
   357
deba@2016
   358
/**
deba@2084
   359
@defgroup eps_io Postscript exporting
deba@2084
   360
@ingroup io_group
alpar@2117
   361
\brief General \c EPS drawer and graph exporter
deba@2084
   362
alpar@2117
   363
This group contains general \c EPS drawing methods and special
deba@2084
   364
graph exporting tools. 
deba@2084
   365
*/
deba@2084
   366
deba@2084
   367
deba@2084
   368
/**
klao@1030
   369
@defgroup concept Concepts
klao@959
   370
\brief Skeleton classes and concept checking classes
alpar@794
   371
klao@959
   372
This group describes the data/algorithm skeletons and concept checking
klao@1030
   373
classes implemented in LEMON.
klao@1030
   374
alpar@2117
   375
The purpose of the classes in this group is fourfold.
alpar@2117
   376
 
alpar@2117
   377
- These classes contain the documentations of the concepts. In order
alpar@2117
   378
  to avoid document multiplications, an implementation of a concept
alpar@2117
   379
  simply refers to the corresponding concept class.
klao@1030
   380
alpar@2233
   381
- These classes declare every functions, <tt>typedef</tt>s etc. an
alpar@2117
   382
  implementation of the concepts should provide, however completely
alpar@2117
   383
  without implementations and real data structures behind the
alpar@2117
   384
  interface. On the other hand they should provide nothing else. All
alpar@2117
   385
  the algorithms working on a data structure meeting a certain concept
alpar@2117
   386
  should compile with these classes. (Though it will not run properly,
alpar@2117
   387
  of course.) In this way it is easily to check if an algorithm
alpar@2117
   388
  doesn't use any extra feature of a certain implementation.
alpar@2117
   389
alpar@2233
   390
- The concept descriptor classes also provide a <em>checker class</em>
alpar@2117
   391
  that makes it possible check whether a certain implementation of a
alpar@2117
   392
  concept indeed provides all the required features.
alpar@2117
   393
alpar@2117
   394
- Finally, They can serve as a skeleton of a new implementation of a concept.
klao@1030
   395
alpar@794
   396
*/
alpar@794
   397
deba@2084
   398
klao@1030
   399
/**
klao@1030
   400
@defgroup graph_concepts Graph Structure Concepts
klao@1030
   401
@ingroup concept
klao@1030
   402
\brief Skeleton and concept checking classes for graph structures
klao@1030
   403
klao@1030
   404
This group contains the skeletons and concept checking classes of LEMON's
klao@1030
   405
graph structures and helper classes used to implement these.
klao@1030
   406
*/
alpar@794
   407
alpar@1587
   408
/* --- Unused group
alpar@678
   409
@defgroup experimental Experimental Structures and Algorithms
alpar@678
   410
This group contains some Experimental structures and algorithms.
alpar@678
   411
The stuff here is subject to change.
alpar@678
   412
*/
alpar@1151
   413
alpar@1558
   414
/**
athos@1582
   415
\anchor demoprograms
athos@1582
   416
alpar@1558
   417
@defgroup demos Demo programs
alpar@1558
   418
alpar@1559
   419
Some demo programs are listed here. Their full source codes can be found in
alpar@1558
   420
the \c demo subdirectory of the source tree.
alpar@1558
   421
ladanyi@1639
   422
The standard compilation procedure (<tt>./configure;make</tt>) will compile
ladanyi@1639
   423
them, as well. 
alpar@1558
   424
alpar@1558
   425
*/
alpar@1558
   426