Overview of (di)graph data structures#
This module contains no code, and describes Sage’s data structures for graphs
and digraphs. They can be used directly at Cython/C level, or through the
Graph
and DiGraph
classes (except one)
Data structures#
Four data structures are natively available for (di)graphs in Sage:
sparse_graph
(default) – for sparse (di)graphs, with a \(\log(n)\) edge test, and easy enumeration of neighbors. It is the most general-purpose data structure, though it can have a high memory cost in practice.Supports: Addition/removal of edges/vertices, multiple edges, edge labels and loops.
dense_graph
– for dense (di)graphs, with a \(O(1)\) edge test, and slow enumeration of neighbors.Supports: addition/removal of edges/vertices, and loops.
Does not support: multiple edges and edge labels.
static_sparse_graph
– for sparse (di)graphs and very intensive computations (at C-level). It is faster thansparse_graph
in practice and much lighter in memory.Supports: multiple edges, edge labels and loops
Does not support: addition/removal of edges/vertices.
static_dense_graph
– for dense (di)graphs and very intensive computations (at C-level). It is mostly a wrapper over bitsets.Supports: addition/removal of edges/vertices, and loops.
Does not support: multiple edges and edge labels.
For more information, see the data structures’ respective pages.
The backends#
The Graph
and DiGraph
objects delegate the storage of vertices
and edges to other objects: the graph backends
:
sage: Graph()._backend
<sage.graphs.base.sparse_graph.SparseGraphBackend object at ...>
>>> from sage.all import *
>>> Graph()._backend
<sage.graphs.base.sparse_graph.SparseGraphBackend object at ...>
A (di)graph backend is a simpler (di)graph class having only the most elementary methods (e.g.: add/remove vertices/edges). Its vertices can be arbitrary hashable objects.
The only backend available in Sage is
CGraphBackend
.
CGraph and CGraphBackend#
CGraphBackend
is the backend of all native
data structures that can be used by Graph
and DiGraph
. It is
extended by:
While a CGraphBackend
deals with arbitrary
(hashable) vertices, it contains a ._cg
attribute of type
CGraph
which only deals with integer
vertices.
The CGraph
data structures available in Sage
are:
See the c_graph
module for more information.