gravatar
alpar (Alpar Juttner)
alpar@cs.elte.hu
Minor updates in the doc
0 2 0
default
2 files changed with 11 insertions and 3 deletions:
↑ Collapse diff ↑
Ignore white space 768 line context
1 1
/* -*- C++ -*-
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 19
/*!
20 20

	
21 21
\page coding_style LEMON Coding Style 
22 22

	
23 23
\section naming_conv Naming Conventions
24 24

	
25 25
In order to make development easier we have made some conventions
26 26
according to coding style. These include names of types, classes,
27 27
functions, variables, constants and exceptions. If these conventions
28 28
are met in one's code then it is easier to read and maintain
29 29
it. Please comply with these conventions if you want to contribute
30 30
developing LEMON library.
31 31

	
32 32
\note When the coding style requires the capitalization of an abbreviation,
33 33
only the first letter should be upper case.
34 34

	
35 35
\code
36 36
XmlReader
37 37
\endcode
38 38

	
39 39

	
40 40
\warning In some cases we diverge from these rules.
41
This primary done because STL uses different naming convention and
41
This is primary done because STL uses different naming convention and
42 42
in certain cases
43 43
it is beneficial to provide STL compatible interface.
44 44

	
45 45
\subsection cs-files File Names
46 46

	
47 47
The header file names should look like the following.
48 48

	
49 49
\code
50 50
header_file.h
51 51
\endcode
52 52

	
53 53
Note that all standard LEMON headers are located in the \c lemon subdirectory,
54 54
so you should include them from C++ source like this:
55 55

	
56 56
\code
57 57
#include <lemon/header_file.h>
58 58
\endcode
59 59

	
60 60
The source code files use the same style and they have '.cc' extension.
61 61

	
62 62
\code
63 63
source_code.cc
64 64
\endcode
65 65

	
66 66
\subsection cs-class Classes and other types
67 67

	
68 68
The name of a class or any type should look like the following.
69 69

	
70 70
\code
71 71
AllWordsCapitalizedWithoutUnderscores 
72 72
\endcode
73 73

	
74 74
\subsection cs-func Methods and other functions
75 75

	
76 76
The name of a function should look like the following.
77 77

	
78 78
\code
79 79
firstWordLowerCaseRestCapitalizedWithoutUnderscores 
80 80
\endcode
81 81

	
82 82
\subsection cs-funcs Constants, Macros
83 83

	
84 84
The names of constants and macros should look like the following.
85 85

	
86 86
\code
87 87
ALL_UPPER_CASE_WITH_UNDERSCORES 
88 88
\endcode
89 89

	
90 90
\subsection cs-loc-var Class and instance member variables, auto variables 
91 91

	
92 92
The names of class and instance member variables and auto variables (=variables used locally in methods) should look like the following.
93 93

	
94 94
\code
95 95
all_lower_case_with_underscores 
96 96
\endcode
97 97

	
98
\subsection pri-loc-var Private member variables
99

	
100
Private member variables should start with underscore
101

	
102
\code
103
_start_with_underscores
104
\endcode
105

	
98 106
\subsection cs-excep Exceptions
99 107

	
100 108
When writing exceptions please comply the following naming conventions.
101 109

	
102 110
\code
103 111
ClassNameEndsWithException
104 112
\endcode
105 113

	
106 114
or
107 115

	
108 116
\code
109 117
ClassNameEndsWithError
110 118
\endcode
111 119

	
112 120
\section header-template Template Header File
113 121

	
114 122
Each LEMON header file should look like this:
115 123

	
116 124
\include template.h
117 125

	
118 126
*/
Ignore white space 768 line context
... ...
@@ -187,399 +187,399 @@
187 187

	
188 188
/**
189 189
@defgroup algs Algorithms
190 190
\brief This group describes the several algorithms
191 191
implemented in LEMON.
192 192

	
193 193
This group describes the several algorithms
194 194
implemented in LEMON.
195 195
*/
196 196

	
197 197
/**
198 198
@defgroup search Graph Search
199 199
@ingroup algs
200 200
\brief This group contains the common graph
201 201
search algorithms.
202 202

	
203 203
This group contains the common graph
204 204
search algorithms like Bfs and Dfs.
205 205
*/
206 206

	
207 207
/**
208 208
@defgroup shortest_path Shortest Path algorithms
209 209
@ingroup algs
210 210
\brief This group describes the algorithms
211 211
for finding shortest paths.
212 212

	
213 213
This group describes the algorithms for finding shortest paths in
214 214
graphs.
215 215

	
216 216
*/
217 217

	
218 218
/** 
219 219
@defgroup max_flow Maximum Flow algorithms 
220 220
@ingroup algs 
221 221
\brief This group describes the algorithms for finding maximum flows.
222 222

	
223 223
This group describes the algorithms for finding maximum flows and
224 224
feasible circulations.
225 225

	
226 226
The maximum flow problem is to find a flow between a single-source and
227 227
single-target that is maximum. Formally, there is \f$G=(V,A)\f$
228 228
directed graph, an \f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity
229 229
function and given \f$s, t \in V\f$ source and target node. The
230 230
maximum flow is the solution of the next optimization problem:
231 231

	
232 232
\f[ 0 \le f_a \le c_a \f]
233 233
\f[ \sum_{v\in\delta^{-}(u)}f_{vu}=\sum_{v\in\delta^{+}(u)}f_{uv} \quad u \in V \setminus \{s,t\}\f]
234 234
\f[ \max \sum_{v\in\delta^{+}(s)}f_{uv} - \sum_{v\in\delta^{-}(s)}f_{vu}\f]
235 235

	
236 236
The lemon contains several algorithms for solve maximum flow problems:
237 237
- \ref lemon::EdmondsKarp "Edmonds-Karp" 
238 238
- \ref lemon::Preflow "Goldberg's Preflow algorithm"
239 239
- \ref lemon::DinitzSleatorTarjan "Dinitz's blocking flow algorithm with dynamic tree"
240 240
- \ref lemon::GoldbergTarjan "Preflow algorithm with dynamic trees"
241 241

	
242 242
In most cases the \ref lemon::Preflow "preflow" algorithm provides the
243 243
fastest method to compute the maximum flow. All impelementations
244 244
provides functions for query the minimum cut, which is the dual linear
245 245
programming probelm of the maximum flow.
246 246

	
247 247
*/
248 248

	
249 249
/**
250 250
@defgroup min_cost_flow Minimum Cost Flow algorithms
251 251
@ingroup algs
252 252

	
253 253
\brief This group describes the algorithms
254 254
for finding minimum cost flows and circulations.
255 255

	
256 256
This group describes the algorithms for finding minimum cost flows and
257 257
circulations.  
258 258
*/
259 259

	
260 260
/**
261 261
@defgroup min_cut Minimum Cut algorithms 
262 262
@ingroup algs 
263 263

	
264 264
\brief This group describes the algorithms for finding minimum cut in
265 265
graphs.
266 266

	
267 267
This group describes the algorithms for finding minimum cut in graphs.
268 268

	
269 269
The minimum cut problem is to find a non-empty and non-complete
270 270
\f$X\f$ subset of the vertices with minimum overall capacity on
271 271
outgoing arcs. Formally, there is \f$G=(V,A)\f$ directed graph, an
272 272
\f$c_a:A\rightarrow\mathbf{R}^+_0\f$ capacity function. The minimum
273 273
cut is the solution of the next optimization problem:
274 274

	
275 275
\f[ \min_{X \subset V, X\not\in \{\emptyset, V\}}\sum_{uv\in A, u\in X, v\not\in X}c_{uv}\f]
276 276

	
277 277
The lemon contains several algorithms related to minimum cut problems:
278 278

	
279 279
- \ref lemon::HaoOrlin "Hao-Orlin algorithm" for calculate minimum cut
280 280
  in directed graphs  
281 281
- \ref lemon::NagamochiIbaraki "Nagamochi-Ibaraki algorithm" for
282 282
  calculate minimum cut in undirected graphs
283 283
- \ref lemon::GomoryHuTree "Gomory-Hu tree computation" for calculate all
284 284
  pairs minimum cut in undirected graphs
285 285

	
286 286
If you want to find minimum cut just between two distinict nodes,
287 287
please see the \ref max_flow "Maximum Flow page".
288 288

	
289 289
*/
290 290

	
291 291
/**
292 292
@defgroup graph_prop Connectivity and other graph properties
293 293
@ingroup algs
294 294
\brief This group describes the algorithms
295 295
for discover the graph properties
296 296

	
297 297
This group describes the algorithms for discover the graph properties
298 298
like connectivity, bipartiteness, euler property, simplicity, etc...
299 299

	
300 300
\image html edge_biconnected_components.png
301 301
\image latex edge_biconnected_components.eps "bi-edge-connected components" width=\textwidth
302 302
*/
303 303

	
304 304
/**
305 305
@defgroup planar Planarity embedding and drawing
306 306
@ingroup algs
307 307
\brief This group contains algorithms for planarity embedding and drawing
308 308

	
309 309
This group contains algorithms for planarity checking, embedding and drawing.
310 310

	
311 311
\image html planar.png
312 312
\image latex planar.eps "Plane graph" width=\textwidth
313 313
*/
314 314

	
315 315
/**
316 316
@defgroup matching Matching algorithms 
317 317
@ingroup algs
318 318
\brief This group describes the algorithms
319 319
for find matchings in graphs and bipartite graphs.
320 320

	
321 321
This group provides some algorithm objects and function to calculate
322 322
matchings in graphs and bipartite graphs. The general matching problem is
323 323
finding a subset of the edges which does not shares common endpoints.
324 324
 
325 325
There are several different algorithms for calculate matchings in
326 326
graphs.  The matching problems in bipartite graphs are generally
327 327
easier than in general graphs. The goal of the matching optimization
328 328
can be the finding maximum cardinality, maximum weight or minimum cost
329 329
matching. The search can be constrained to find perfect or
330 330
maximum cardinality matching.
331 331

	
332 332
Lemon contains the next algorithms:
333 333
- \ref lemon::MaxBipartiteMatching "MaxBipartiteMatching" Hopcroft-Karp 
334 334
  augmenting path algorithm for calculate maximum cardinality matching in 
335 335
  bipartite graphs
336 336
- \ref lemon::PrBipartiteMatching "PrBipartiteMatching" Push-Relabel 
337 337
  algorithm for calculate maximum cardinality matching in bipartite graphs 
338 338
- \ref lemon::MaxWeightedBipartiteMatching "MaxWeightedBipartiteMatching" 
339 339
  Successive shortest path algorithm for calculate maximum weighted matching 
340 340
  and maximum weighted bipartite matching in bipartite graph
341 341
- \ref lemon::MinCostMaxBipartiteMatching "MinCostMaxBipartiteMatching" 
342 342
  Successive shortest path algorithm for calculate minimum cost maximum 
343 343
  matching in bipartite graph
344 344
- \ref lemon::MaxMatching "MaxMatching" Edmond's blossom shrinking algorithm
345 345
  for calculate maximum cardinality matching in general graph
346 346
- \ref lemon::MaxWeightedMatching "MaxWeightedMatching" Edmond's blossom
347 347
  shrinking algorithm for calculate maximum weighted matching in general
348 348
  graph
349 349
- \ref lemon::MaxWeightedPerfectMatching "MaxWeightedPerfectMatching"
350 350
  Edmond's blossom shrinking algorithm for calculate maximum weighted
351 351
  perfect matching in general graph
352 352

	
353 353
\image html bipartite_matching.png
354 354
\image latex bipartite_matching.eps "Bipartite Matching" width=\textwidth
355 355

	
356 356
*/
357 357

	
358 358
/**
359 359
@defgroup spantree Minimum Spanning Tree algorithms
360 360
@ingroup algs
361 361
\brief This group contains the algorithms for finding a minimum cost spanning
362 362
tree in a graph
363 363

	
364 364
This group contains the algorithms for finding a minimum cost spanning
365 365
tree in a graph
366 366
*/
367 367

	
368 368

	
369 369
/**
370 370
@defgroup auxalg Auxiliary algorithms
371 371
@ingroup algs
372 372
\brief Some algorithms implemented in LEMON.
373 373

	
374 374
This group describes the algorithms in LEMON in order to make 
375 375
it easier to implement complex algorithms.
376 376
*/
377 377

	
378 378
/**
379 379
@defgroup approx Approximation algorithms
380 380
\brief Approximation algorithms
381 381

	
382 382
Approximation and heuristic algorithms
383 383
*/
384 384

	
385 385
/**
386 386
@defgroup gen_opt_group General Optimization Tools
387 387
\brief This group describes some general optimization frameworks
388 388
implemented in LEMON.
389 389

	
390 390
This group describes some general optimization frameworks
391 391
implemented in LEMON.
392 392

	
393 393
*/
394 394

	
395 395
/**
396 396
@defgroup lp_group Lp and Mip solvers
397 397
@ingroup gen_opt_group
398 398
\brief Lp and Mip solver interfaces for LEMON.
399 399

	
400 400
This group describes Lp and Mip solver interfaces for LEMON. The
401 401
various LP solvers could be used in the same manner with this
402 402
interface.
403 403

	
404 404
*/
405 405

	
406 406
/** 
407 407
@defgroup lp_utils Tools for Lp and Mip solvers 
408 408
@ingroup lp_group
409 409
\brief This group adds some helper tools to the Lp and Mip solvers
410 410
implemented in LEMON.
411 411

	
412 412
This group adds some helper tools to general optimization framework
413 413
implemented in LEMON.
414 414
*/
415 415

	
416 416
/**
417 417
@defgroup metah Metaheuristics
418 418
@ingroup gen_opt_group
419 419
\brief Metaheuristics for LEMON library.
420 420

	
421 421
This group contains some metaheuristic optimization tools.
422 422
*/
423 423

	
424 424
/**
425 425
@defgroup utils Tools and Utilities 
426 426
\brief Tools and Utilities for Programming in LEMON
427 427

	
428 428
Tools and Utilities for Programming in LEMON
429 429
*/
430 430

	
431 431
/**
432 432
@defgroup gutils Basic Graph Utilities
433 433
@ingroup utils
434 434
\brief This group describes some simple basic graph utilities.
435 435

	
436 436
This group describes some simple basic graph utilities.
437 437
*/
438 438

	
439 439
/**
440 440
@defgroup misc Miscellaneous Tools
441 441
@ingroup utils
442 442
Here you can find several useful tools for development,
443 443
debugging and testing.
444 444
*/
445 445

	
446 446

	
447 447
/**
448 448
@defgroup timecount Time measuring and Counting
449 449
@ingroup misc
450 450
Here you can find simple tools for measuring the performance
451 451
of algorithms.
452 452
*/
453 453

	
454 454
/**
455 455
@defgroup graphbits Tools for Graph Implementation
456 456
@ingroup utils
457 457
\brief Tools to Make It Easier to Make Graphs.
458 458

	
459 459
This group describes the tools that makes it easier to make graphs and
460 460
the maps that dynamically update with the graph changes.
461 461
*/
462 462

	
463 463
/**
464 464
@defgroup exceptions Exceptions
465 465
@ingroup utils
466 466
This group contains the exceptions thrown by LEMON library
467 467
*/
468 468

	
469 469
/**
470 470
@defgroup io_group Input-Output
471 471
\brief Several Graph Input-Output methods
472 472

	
473 473
Here you can find tools for importing and exporting graphs 
474 474
and graph related data. Now it supports the LEMON format, the
475 475
\c DIMACS format and the encapsulated postscript format.
476 476
*/
477 477

	
478 478
/**
479 479
@defgroup lemon_io Lemon Input-Output
480 480
@ingroup io_group
481 481
\brief Reading and writing LEMON format
482 482

	
483 483
Methods for reading and writing LEMON format. More about this
484 484
format you can find on the \ref graph-io-page "Graph Input-Output"
485 485
tutorial pages.
486 486
*/
487 487

	
488 488
/**
489 489
@defgroup section_io Section readers and writers
490 490
@ingroup lemon_io
491 491
\brief Section readers and writers for lemon Input-Output.
492 492

	
493 493
Here you can find which section readers and writers can attach to
494 494
the LemonReader and LemonWriter.
495 495
*/
496 496

	
497 497
/**
498 498
@defgroup item_io Item Readers and Writers
499 499
@ingroup lemon_io
500 500
\brief Item readers and writers for lemon Input-Output.
501 501

	
502 502
The Input-Output classes can handle more data type by example
503 503
as map or attribute value. Each of these should be written and
504 504
read some way. The module make possible to do this.  
505 505
*/
506 506

	
507 507
/**
508 508
@defgroup eps_io Postscript exporting
509 509
@ingroup io_group
510 510
\brief General \c EPS drawer and graph exporter
511 511

	
512 512
This group contains general \c EPS drawing methods and special
513 513
graph exporting tools. 
514 514
*/
515 515

	
516 516

	
517 517
/**
518 518
@defgroup concept Concepts
519 519
\brief Skeleton classes and concept checking classes
520 520

	
521 521
This group describes the data/algorithm skeletons and concept checking
522 522
classes implemented in LEMON.
523 523

	
524 524
The purpose of the classes in this group is fourfold.
525 525
 
526 526
- These classes contain the documentations of the concepts. In order
527 527
  to avoid document multiplications, an implementation of a concept
528 528
  simply refers to the corresponding concept class.
529 529

	
530 530
- These classes declare every functions, <tt>typedef</tt>s etc. an
531 531
  implementation of the concepts should provide, however completely
532 532
  without implementations and real data structures behind the
533 533
  interface. On the other hand they should provide nothing else. All
534 534
  the algorithms working on a data structure meeting a certain concept
535 535
  should compile with these classes. (Though it will not run properly,
536 536
  of course.) In this way it is easily to check if an algorithm
537 537
  doesn't use any extra feature of a certain implementation.
538 538

	
539 539
- The concept descriptor classes also provide a <em>checker class</em>
540 540
  that makes it possible check whether a certain implementation of a
541 541
  concept indeed provides all the required features.
542 542

	
543 543
- Finally, They can serve as a skeleton of a new implementation of a concept.
544 544

	
545 545
*/
546 546

	
547 547

	
548 548
/**
549 549
@defgroup graph_concepts Graph Structure Concepts
550 550
@ingroup concept
551 551
\brief Skeleton and concept checking classes for graph structures
552 552

	
553 553
This group contains the skeletons and concept checking classes of LEMON's
554 554
graph structures and helper classes used to implement these.
555 555
*/
556 556

	
557 557
/* --- Unused group
558 558
@defgroup experimental Experimental Structures and Algorithms
559 559
This group contains some Experimental structures and algorithms.
560 560
The stuff here is subject to change.
561 561
*/
562 562

	
563 563
/**
564 564
\anchor demoprograms
565 565

	
566 566
@defgroup demos Demo programs
567 567

	
568 568
Some demo programs are listed here. Their full source codes can be found in
569 569
the \c demo subdirectory of the source tree.
570 570

	
571
The standard compilation procedure (<tt>./configure;make</tt>) will compile
572
them, as well. 
571
It order to compile them, use <tt>--enable-demo</tt> configure option when
572
build the library.
573 573

	
574 574
*/
575 575

	
576 576
/**
577 577
@defgroup tools Standalone utility applications
578 578

	
579 579
Some utility applications are listed here. 
580 580

	
581 581
The standard compilation procedure (<tt>./configure;make</tt>) will compile
582 582
them, as well. 
583 583

	
584 584
*/
585 585

	
0 comments (0 inline)