Jump to content

What are graph algorithms, and how do you implement them on parallel systems?

0
  mike-loukides's Photo
Posted Sep 30 2009 12:50 PM

Graphs show up everywhere in social networking. But doing computation on graphs is notoriously time consuming. What are graphs, and how do you work with them efficiently? Here's an answer, from The Art of Concurrency: A Thread Monkey's Guide to Writing Parallel Applications (by Clay Breshears), chapter 10:

A graph is a computation object that is used to model relationships among things. For example, constituent atoms within a molecule, components within an electrical circuit, and nodes in a communication network are all things that you can represent and manipulate as graphs. Trees are graphs with special properties, so you could represent a hierarchical chart or family tree as a graph. There is a lot of terminology involved with graph theory. The next few paragraphs give a quick overview of the basic terminology needed to study concurrent algorithms to compute with graphs. If you're already familiar with graph theory terms, feel free to skip ahead a bit. Of course, if you've made it this far through the book, what's another page and a half between reader and author?

A graph is made up of two finite sets: a set of nodes (or vertices) and a set of edges. Each node has a label to identify it and distinguish it from other nodes. Edges in a graph connect exactly two nodes and are denoted by the labels of the pair of nodes that are related. If you have a graph of three nodes—A, B, and C—the two edges connecting A with B and B with C would be written as (A,B ) and (B,C ).

A graph is directed if all edge pairs are ordered. Directed edges represent a one-way relationship from one node to another. If the node pairs are unordered, the graph is undirected. A directed graph can be undirected if, for every edge (u,v ), the graph contains the edge (v,u ). Think of a two-way street where traffic can travel between two intersections in either direction, but only on the correct side of the street.

This is the best (and simplest) explanation of graphs that I've seen. The remainder of the chapter shows how to develop algorithms to do computations on graphs.

Cover of The Art of Concurrency
Learn more about this topic from The Art of Concurrency. 

Looking to take full advantage of multi-core processors with concurrent programming ? As one of the few resources to focus on implementing algorithms in the shared-memory model of multi-core processors, rather than just on theoretical models or distributed-memory architectures, The Art of Concurrency provides the knowledge and hands-on experience you need. You'll get detailed explanations and usable samples to help you transform algorithms from serial to parallel code, along with advice and analysis to steer you clear of mistakes.

Learn More Read Now on Safari


0 Replies