C++ Boost

minimum_degree_ordering

Graphs: directed
Properties: out degree
  template <class AdjacencyGraph, class OutDegreeMap,
           class InversePermutationMap, 
           class PermutationMap, class SuperNodeSizeMap, class VertexIndexMap>
  void minimum_degree_ordering
    (AdjacencyGraph& G,
     OutDegreeMap outdegree,
     InversePermutationMap inverse_perm,
     PermutationMap perm, 
     SuperNodeSizeMap supernode_size, int delta, VertexIndexMap id) 
The minimum degree ordering algorithm   [
21, 35] is a fill-in reduction reordering algorithm. It chooses the vertex with minimum degree in the graph at each step of simulating Gaussian elimination process. This implementation provided a number of enhancements including mass elimination, incomplete degree update, multiple elimination, and external degree. See [35] for a historical survey of the minimum degree algorithm.

The graph G corresponding to a symmetric matrix A should be directed one instead of a undirected graph in this implementation. Therefore, nonzero entry A(i, j) corresponds two directed edges (e(i,j) and e(j,i)) in G.

The output of the algorithm are the vertices in the new ordering.

  inverse_perm[new_index[u]] == old_index[u]

and the permutation from the old index to the new index.

  perm[old_index[u]] == new_index[u]

The following equations are always held.

  for (size_type i = 0; i != inverse_perm.size(); ++i)
    perm[inverse_perm[i]] == i;

Parameters

Example

See example/minimum_degree_ordering.cpp.

Copyright © 2001 Lie-Quan Lee, Univ.of Notre Dame (llee1@lsc.nd.edu)
Jeremy Siek, Univ.of Notre Dame (jsiek@lsc.nd.edu)