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 than sparse_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 ...>

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.