Graph Problems (was Re: Is there a map or graph module?)

Brian Kelley bkelley at wi.mit.edu
Mon Mar 22 09:32:05 EST 2004


Morten Kjeldgaard wrote:
> On Fri, 19 Mar 2004 07:55:23 -0800, Lilith wrote:
> 
> Any Python implementation is going to be extremely slow. 

I have found this not to be true.  I have subgraph isomorphism routines 
that run between 4 and 8 time slower than the equivalent C code.  I do 
have some issues with using dictionaries as graphs since this means that 
traversing through them can be quite a bit slower than the equivalent 
list traversal.

By far, the best optimization that I have found is to make a vertex 
object that contains the following items:

self.edges -> the list of edges connected to this vertex
self.adjacentVertices -> the list of vertices adjacent to this vertex

such that
for edge, vertex in zip(vertex.edges, vertex.adjacentVertices):

returns a vertex's edges and corresponding adjacent vertices.  This ends 
up being more memory efficient than using dictionaries as well.  The 
downsides are that editing the graph takes longer.

I regularly use graphs of 10,000+ nodes and 100,000+ edges and use 
scoring functions to find best scoring paths within the graph.  In case 
you are interested, check this out:

http://www.pathblast.org/

Surprisingly, the python implementation ended up being faster than the 
java implementation (even when using a JIT), although this might be a 
red-herring since the java implementation had a lot of extra baggage.

Brian Kelley



More information about the Python-list mailing list