Warning

This documents an unmaintained version of NetworkX. Please upgrade to a maintained version and see the current NetworkX documentation.

reverse_cuthill_mckee_ordering

reverse_cuthill_mckee_ordering(G, heuristic=None)[source]

Generate an ordering (permutation) of the graph nodes to make a sparse matrix.

Uses the reverse Cuthill-McKee heuristic (based on breadth-first search) [R334].

Parameters :

G : graph

A NetworkX graph

heuristic : function, optional

Function to choose starting node for RCM algorithm. If None a node from a psuedo-peripheral pair is used. A user-defined function can be supplied that takes a graph object and returns a single node.

Returns :

nodes : generator

Generator of nodes in reverse Cuthill-McKee ordering.

Notes

The optimal solution the the bandwidth reduction is NP-complete [R335].

References

[R334](1, 2) E. Cuthill and J. McKee. Reducing the bandwidth of sparse symmetric matrices, In Proc. 24th Nat. Conf. ACM, pages 157-72, 1969. http://doi.acm.org/10.1145/800195.805928
[R335](1, 2) Steven S. Skiena. 1997. The Algorithm Design Manual. Springer-Verlag New York, Inc., New York, NY, USA.

Examples

>>> from networkx.utils import reverse_cuthill_mckee_ordering
>>> G = nx.path_graph(4)
>>> rcm = list(reverse_cuthill_mckee_ordering(G))
>>> A = nx.adjacency_matrix(G, nodelist=rcm) 

Smallest degree node as heuristic function:

>>> def smallest_degree(G):
...     node,deg = sorted(G.degree().items(), key = lambda x:x[1])[0]
...     return node
>>> rcm = list(reverse_cuthill_mckee_ordering(G, heuristic=smallest_degree))