COIN-OR::LEMON - Graph Library

source: lemon-tutorial/graphs.dox @ 59:5d9170b19285

Last change on this file since 59:5d9170b19285 was 50:72867897fcba, checked in by Peter Kovacs <kpeter@…>, 15 years ago

Minor improvements

File size: 4.5 KB
RevLine 
[28]1/* -*- mode: C++; indent-tabs-mode: nil; -*-
2 *
3 * This file is a part of LEMON, a generic C++ optimization library.
4 *
[32]5 * Copyright (C) 2003-2010
[28]6 * Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport
7 * (Egervary Research Group on Combinatorial Optimization, EGRES).
8 *
9 * Permission to use, modify and distribute this software is granted
10 * provided that this copyright notice appears in all copies. For
11 * precise terms see the accompanying LICENSE file.
12 *
13 * This software is provided "AS IS" with no warranty of any kind,
14 * express or implied, and with no claim as to its suitability for any
15 * purpose.
16 *
17 */
18
19namespace lemon {
20/**
21[PAGE]sec_graph_structures[PAGE] Graph Structures
22
23The implementation of combinatorial algorithms heavily relies on
24efficient graph structures. Diverse applications require the
25usage of different physical graph storages.
[46]26Until now, we used two general graph structures, \ref ListDigraph
27and \ref ListGraph. Apart from these types, LEMON also provides several
[28]28other classes for handling directed and undirected graphs to meet the
29diverging requirements of the possible users. In order to save on running
30time or on memory usage, some structures may fail to support some graph
31features like node or arc/edge deletion.
32You are free to use the graph structure that fit your requirements the best,
33since most graph algorithms and auxiliary data structures can be used
34with any of them.
35
36
37[SEC]sec_graph_concepts[SEC] Graph Concepts
38
39In LEMON, there are various graph types, which are rather different, but
40they all conform to the corresponding \ref graph_concepts "graph concept",
[32]41which defines the common part of the graph interfaces.
[28]42The \ref concepts::Digraph "Digraph concept" describes the common interface
43of directed graphs (without any sensible implementation), while
44the \ref concepts::Graph "Graph concept" describes the undirected graphs.
[38]45A generic graph algorithm should only exploit the features of the
46corresponding graph concept so that it could be applied to any graph
47structure. (Such an algorithm should compile with the
[28]48\ref concepts::Digraph "Digraph" or \ref concepts::Graph "Graph" type,
49but it will not run properly, of course.)
50
51The graph %concepts define the member classes for the iterators and maps
52along with some useful basic functions for obtaining the identifiers of
53the items, the end nodes of the arcs (or edges) and their iterators,
[32]54etc.
[28]55An actual graph implementation may have various additional functionalities
56according to its purpose.
57
[38]58Another advantage of this design is that you can write your own graph classes,
59if you would like to.
60As long as they provide the interface defined in one of the graph concepts,
61all the LEMON algorithms and classes will work with them properly.
62
[28]63
[46]64[SEC]sec_digraph_types[SEC] Directed Graph Structures
[28]65
66The already used \ref ListDigraph class is the most versatile directed
[38]67graph structure. As its name suggests, it is based on linked lists,
68therefore iterating through its nodes and arcs is fast and it is quite
69flexible. Apart from the general digraph functionalities, it
[28]70provides operations for adding and removing nodes and arcs, changing
71the source or target node of an arc, and contracting and splitting nodes
72or arcs.
73
74\ref SmartDigraph is another general digraph implementation, which is
75significantly more efficient (both in terms of space and time), but it
76provides less functionality. For example, nodes and arcs cannot be
[32]77removed from it.
[28]78
[38]79The \ref StaticDigraph structure is even more optimized for efficiency,
80but it is completely static. It requires less space in memory and
81provides faster item iteration than \ref ListDigraph and \ref
82SmartDigraph, especially using \ref concepts::Digraph::OutArcIt
83"OutArcIt" iterators, since its arcs are stored in an appropriate order.
[50]84However, you can neither add nor delete arcs or nodes, the graph
85has to be built at once and other modifications are not supported.
[38]86 
[28]87\ref FullDigraph is an efficient implementation of a directed full graph.
[50]88This structure is also completely static and it needs constant space
89in memory.
[28]90
91
[46]92[SEC]sec_graph_types[SEC] Undirected Graph Structures
[28]93
[46]94The general undirected graph classes, \ref ListGraph and \ref SmartGraph
95have similar implementations as their directed variants.
[50]96Therefore, \ref SmartGraph is more efficient, but \ref ListGraph provides
[46]97more functionality.
98In addition to these general structures, LEMON also provides special purpose
99undirected graph types for handling \ref FullGraph "full graphs",
100\ref GridGraph "grid graphs" and \ref HypercubeGraph "hypercube graphs".
[28]101
102[TRAILER]
103*/
104}
Note: See TracBrowser for help on using the repository browser.