2

I've put some research in on the topic of graph isomorphism for planar 3-connected graphs, but there are an abundance of algorithms of different restriction, theoretical complexity, and frequency of use and I am having trouble finding one that stands out as:

  • Easy to understand
  • Can be implemented with maximum clarity
  • Good practical performance on small graphs (up to vertices in the dozens)

It's hard to know without understanding the different algorithms myself whether I'm better off with one of the older, more-specialized algorithms for this problem or the newer, more-general ones. Among all possible candidates, which one is/ones are the best fit?

Mike Graham
  • 73,987
  • 14
  • 101
  • 130
  • Hope that's a little better. You might consider flagging to migrate to one of our other sites. I'm not sure this is going to get much traction here.. –  Mar 15 '12 at 11:44
  • I appreciate the concern. Before posting my question, it occurred to me this might not be the best SE, but I could not come up with a more appropriate one—it seems to me it's not theoretical computer science, it's not a conceptual question about software development, it's not really mathematics, etc...Can you advise which site you think this works best on? – Mike Graham Mar 15 '12 at 13:29
  • Your guess is as good as mine. I'm only really familiar with the big three (and Programmers), as thats what I mostly deal with... –  Mar 15 '12 at 14:08

1 Answers1

2

I think Weinberg's algorithm fits the bill.

  • Easy to understand: compute rotation systems for G and H as byproducts of a planarity testing algorithm. Since G and H are 3-connected, these rotation systems are isomorphic up to interchanging clockwise and counterclockwise if and only if G and H are isomorphic. Choose a dart (= edge with an indicated direction) d in G and try mapping it to all darts e in H (and repeat for the other orientation of H). Since G is connected, all other darts d' can be reached from d by composing the two operations of the rotation system for G. Apply the corresponding operations to e and check whether there is isomorphism.

  • Maximum clarity: aside from the planarity test, the above is a page of code. Maybe you could reuse someone else's planarity test? There's one in Boost, for example. If not, I still think implementing your own is easier than rewriting nauty.

  • Good practical performance on small graphs: after planarity testing, Weinberg's algorithm is basically two synchronized depth-first traversals for each dart. The total running time is O(|V|2) with no large constants lurking.

rap music
  • 386
  • 2
  • 4
  • Note: it's possible that Hopcroft and Tarjan's |V|log|V| algorithm is comparably simple; I don't have access to their article right now. On the other hand, the difference between a linear-time planarity test and a quadratic-time planarity test is some fancy data structures, so if you're writing the test yourself, you might settle for quadratic time there too. – rap music Mar 17 '12 at 20:22