Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Eliminating symmetry from graphs

I have an algorithmic problem in which I have derived a transfer matrix between a lot of states. The next step is to exponentiate it, but it is very large, so I need to do some reductions on it. Specifically it contains a lot of symmetry. Below are some examples on how many nodes can be eliminated by simple observations.

My question is whether there is an algorithm to efficiently eliminate symmetry in digraphs, similarly to the way I've done it manually below.

In all cases the initial vector has the same value for all nodes.


In the first example we see that b, c, d and e all receive values from a and one of each other. Hence they will always contain an identical value, and we can merge them.

Digraph ADigraph B


In this example we quickly spot, that the graph is identical from the point of view of a, b, c and d. Also for their respective sidenodes, it doesn't matter to which inner node it is attached. Hence we can reduce the graph down to only two states.

Digraph CDigraph D


Update: Some people were reasonable enough not quite sure what was meant by "State transfer matrix". The idea here is, that you can split a combinatorial problem up into a number of state types for each n in your recurrence. The matrix then tell you how to get from n-1 to n.

Usually you are only interested about the value of one of your states, but you need to calculate the others as well, so you can always get to the next level. In some cases however, multiple states are symmetrical, meaning they will always have the same value. Obviously it's quite a waste to calculate all of these, so we want to reduce the graph until all nodes are "unique".

Below is an example of the transfer matrix for the reduced graph in example 1.

[S_a(n)]   [1  1  1] [S_a(n-1)]
[S_f(n)] = [1  0  0]*[S_f(n-1)]
[S_B(n)]   [4  0  1] [S_B(n-1)]

Any suggestions or references to papers are appreciated.

like image 298
Thomas Ahle Avatar asked Feb 17 '11 19:02

Thomas Ahle


People also ask

How do you find the symmetry of a graph?

A graph is symmetric with respect to a line if reflecting the graph over that line leaves the graph unchanged. This line is called an axis of symmetry of the graph. A graph is symmetric with respect to the x-axis if whenever a point is on the graph the point is also on the graph.

What is point of symmetry on a graph?

A point of symmetry is a point that represents a "center" of sorts for the figure. For any line that you draw through the point of symmetry, if this line crosses the figure on one side of the point, the line will also cross the figure on the other side of the point, and at exactly the same distance from the point.

How do you prove point symmetry?

If a graph does not change when reflected over a line or rotated around a point, the graph is symmetric with respect to that line or point. The following graph is symmetric with respect to the x-axis (y = 0). Note that if (x, y) is a point on the graph, then (x, - y) is also a point on the graph.


1 Answers

Brendan McKay's nauty ( http://cs.anu.edu.au/~bdm/nauty/) is the best tool I know of for computing automorphisms of graphs. It may be too expensive to compute the whole automorphism group of your graph, but you might be able to reuse some of the algorithms described in McKay's paper "Practical Graph Isomorphism" (linked from the nauty page).

like image 192
userOVER9000 Avatar answered Sep 24 '22 21:09

userOVER9000