Skip to main content

Posts

Showing posts from April, 2012

Honeycombs and Macrocyles

Small rings in chemistry are usually laid out as polygons; 5-membered rings as a pentagon, 6-membered as a hexagon, and so on. Once you get beyond about 9-10, this tends to look a little nasty. Or at least, unconventional.

So for 'macrocycles', it makes sense to make a less circular, and more wavy outline. Or, to be more exact, there is an inner cycle and several outer cycles, like this:

To make it clearer, I have used a chemical-like structure with oxygens in the inner ring. These crown ethers are a particularly clear-cut case, as the ethylene linkages force the particular geometry of the drawing. However, it is not so obvious for other sizes of rings - what possible arrangements are there?

Well, it occurred to me today that there is a simple formula for these macrocycle drawings. For a ring of size n with an inner ring of size i and outer rings or size o, you have to have n = (i * o) - i. The formula can be rearranged, but the idea is that you add up all the outer rings and …

Duals and Inner Duals of Planar Graphs

Graphs that can be embedded in the plane are called planar graphs - that is, they can be drawn without crossings. These drawings (or 'embeddings') have a dual which also corresponds to a graph, with a vertex in the dual for every face in the original, and an edge in the dual for every pair of faces that share an edge.
For example, for each of the embeddings above (in black) of the same graph there is a different dual drawing corresponding to different graphs. If the vertex that represents the outer face is deleted from a dual, you get an inner dual.

These inner duals are what Brinkmann et al use for generating fusanes, as I mentioned. The basic idea is to generate the duals, and then expand those into fusanes. Since the (inner) duals necessarily have less vertices than the full graph, this is quite efficient.

However, I admit that I couldn't be bothered to implement the algorithm properly, even though the technique is partly based on McKay's method which I know a littl…

Generating Trees

Tree generation is a well known (and solved!) problem in computer science. On the other hand, it's pretty important for various problems - in my case, making tree-like fusanes. I'll describe here the slightly tortuous route I took to make trees.

Firstly, there is a famous theorem due to Cayley that the number of (labelled) trees on n vertices is nn - 2 which can be proved by using Prüfer sequences. That's all very well, you might well say - but what does all this mean?

Well, it's not all that important, since there is a fundamental problem with this approach : the difference between a labelled tree and an unlabelled tree. There are many more labeled trees than unlabeled :


There is only one unlabeled tree on 3 vertices, but 3 labeled ones
this is easy to check using the two OEIS sequences for this : A000272 (labeled) and A000055 (unlabeled). For n ranging from 3 to 8 we have [3, 16, 125, 1296, 16807, 262144] labeled trees and [1, 2, 3, 6, 11, 23] unlabeled ones. Only 23 …

Graph Layout

Finally, after much effort, the planar embedder is working.

Along the way, a couple of other things have come out of this work : one is an implementation of a fusane generator roughly related to Brinkmann, Caporossi, and Hansen's paper. I say 'roughly' - actually, it is nothing like it! (To be described in a later post.)

I now also understand better algorithms for spanning tree generations, and cycle finding. These will also be described in later posts, if necessary. For now, though : what about those planar graphs, eh? Got any images...


Fusanes! Or, well, graphs that could model fusanes (polyhexes), to be exact. The colors here are vertex equivalence classes, calculated using signatures. These are quite easy examples, however - they are all outerplanar graphs. So what about something more tricky? How about this :

Not very nicely laid out, but looks a lot like the top picture here, I think. One lesson I have learnt is that an embedding (which is a combinatorial object) is …