Giter VIP home page Giter VIP logo

sourangshughosh / reverse-cuthill-mckee-ordering-in-c Goto Github PK

View Code? Open in Web Editor NEW
4.0 1.0 2.0 48 KB

RCM is a C++ library which computes the Reverse Cuthill McKee ("RCM") ordering of the nodes of a graph. The RCM ordering is frequently used when a matrix is to be generated whose rows and columns are numbered according to the numbering of the nodes. By an appropriate renumbering of the nodes, it is often possible to produce a matrix with a much smaller bandwidth.The bandwidth of a matrix is computed as the maximum bandwidth of each row of the matrix. The bandwidth of a row of the matrix is essentially the number of matrix entries between the first and last nonzero entries in the row, with the proviso that the diagonal entry is always treated as though it were nonzero.This library includes a few routines to handle the common case where the connectivity can be described in terms of a triangulation of the nodes, that is, a grouping of the nodes into sets of 3-node or 6-node triangles. The natural description of a triangulation is simply a listing of the nodes that make up each triangle. The library includes routines for determining the adjacency structure associated with a triangulation, and the test problems include examples of how the nodes in a triangulation can be relabeled with the RCM permutation.

License: GNU Lesser General Public License v2.1

C++ 99.84% Shell 0.16%
graph graphordering graphalgorithm graphtheory sparse-matrix discrete-mathematics

reverse-cuthill-mckee-ordering-in-c's Introduction

Reverse-Cuthill-McKee-Ordering

RCM, a C++ library which computes the Reverse Cuthill McKee (RCM) ordering of the nodes of a graph.

The RCM ordering is frequently used when a matrix is to be generated whose rows and columns are numbered according to the numbering of the nodes. By an appropriate renumbering of the nodes, it is often possible to produce a matrix with a much smaller bandwidth.

The bandwidth of a matrix is computed as the maximum bandwidth of each row of the matrix. The bandwidth of a row of the matrix is essentially the number of matrix entries between the first and last nonzero entries in the row, with the proviso that the diagonal entry is always treated as though it were nonzero.

This library includes a few routines to handle the common case where the connectivity can be described in terms of a triangulation of the nodes, that is, a grouping of the nodes into sets of 3-node or 6-node triangles. The natural description of a triangulation is simply a listing of the nodes that make up each triangle. The library includes routines for determining the adjacency structure associated with a triangulation, and the test problems include examples of how the nodes in a triangulation can be relabeled with the RCM permutation.

Here is a simple example of how reordering can reduce the bandwidth. In our first picture, we have nine nodes:

     5--7--6
       |  | /
    4--8--2
    |  |  |
    9--1--3

The corresponding adjacency matrix is:

    * . 1 . . . . 1 1
    . * 1 . . 1 1 1 .
    1 1 * . . . . . .
    . . . * . . . 1 1
    . . . . * . 1 1 .
    . 1 . . . * 1 . .
    . 1 . . 1 1 * . .
    1 1 . 1 1 . . * .
    1 . . 1 . . . . *

which has a bandwidth of 7 (lower and upper bandwidths of 3, and 1 for the diagonal.)

Licensing:

The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.

Reference:

  1. HL Crane, Norman Gibbs, William Poole, Paul Stockmeyer, Algorithm 508: Matrix Bandwidth and Profile Reduction, ACM Transactions on Mathematical Software, Volume 2, Number 4, December 1976, pages 375-377.

  2. Alan George, Joseph Liu, Computer Solution of Large Sparse Positive Definite Matrices, Prentice Hall, 1981, ISBN: 0131652745, LC: QA188.G46

  3. Norman Gibbs, Algorithm 509: A Hybrid Profile Reduction Algorithm, ACM Transactions on Mathematical Software, Volume 2, Number 4, December 1976, pages 378-387.

  4. Norman Gibbs, William Poole, Paul Stockmeyer, An Algorithm for Reducing the Bandwidth and Profile of a Sparse Matrix, SIAM Journal on Numerical Analysis, Volume 13, Number 2, April 1976, pages 236-250.

  5. John Lewis, Algorithm 582: The Gibbs-Poole-Stockmeyer and Gibbs-King Algorithms for Reordering Sparse Matrices, ACM Transactions on Mathematical Software, Volume 8, Number 2, June 1982, pages 190-194.

If there is any issue or any bug that you might see in the program, please conider making a Pull Request/Issue or contact me directly Sourangshu Ghosh

reverse-cuthill-mckee-ordering-in-c's People

Contributors

sourangshughosh avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.