消除图形的对称性

我有一个算法问题,我在很多状态之间导出了一个传递矩阵。下一步是对它进行取幂,但它非常大,所以我需要对它进行一些减少。具体来说它包含很多对称性。下面是一些关于通过简单观察可以消除多少节点的示例。 我的问题是,是否有一种算法可以有效地消除有向图中的对称性,类似于我在下面手动完成它的方式。 在所有情况下,初始向量对于所有节点具有相同的值。 在第一个例子中,我们看到
b
c
d
e
都从
a
和彼此之一接收值。因此,它们将始终包含相同的值,我们可以合并它们。 在这个例子中,我们很快发现,从
a
b
c
d
的角度来看,图表是相同的。同样对于它们各自的侧节点,它附着在哪个内节点上也无关紧要。因此,我们可以将图形缩小到仅两个状态。 更新:有些人很合理,不太确定“国家转移矩阵”是什么意思。这里的想法是,你可以在你的重现中将组合问题分解为多个状态类型。然后矩阵告诉你如何从
n-1
n
。 通常你只对你的一个州的价值感兴趣,但你也需要计算其他州,所以你总能达到一个新的水平。但是,在某些情况下,多个状态是对称的,这意味着它们将始终具有相同的值。显然,计算所有这些都是非常浪费的,所以我们希望减少图形,直到所有节点都“独特”。 下面是示例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)]
任何建议或对论文的参考都表示赞赏。     
已邀请:
Brendan McKay的nauty(http://cs.anu.edu.au/~bdm/nauty/)是我所知道的用于计算图形自同构的最佳工具。计算图形的整个自同构群可能太昂贵了,但是你可能能够重用McKay的论文“Practical Graph Isomorphism”(链接自nauty页面)中描述的一些算法。     
如果有其他人感兴趣的话,我会根据userOVER9000的建议添加一个额外的答案。 以下是通过
dreadnaut
工具在例2中使用
nauty
的示例。
$ ./dreadnaut 
Dreadnaut version 2.4 (64 bits).
> n=8 d g                                     -- Starting a new 8-node digraph
 0 : 1 3 4;                                   -- Entering edge data
 1 : 0 2 5;
 2 : 3 1 6;
 3 : 0 2 7;
 4 : 0;
 5 : 1;
 6 : 2;
 7 : 3;
> cx                                          -- Calling nauty
(1 3)(5 7)
level 2:  6 orbits; 5 fixed; index 2
(0 1)(2 3)(4 5)(6 7)
level 1:  2 orbits; 4 fixed; index 4
2 orbits; grpsize=8; 2 gens; 6 nodes; maxlev=3
tctotal=8; canupdates=1; cpu time = 0.00 seconds
> o                                           -- Output "orbits"
 0:3; 4:7;
注意它建议加入节点
0:3
,它们是例2中的
a:d
4:7
,它们是
e:h
nauty
算法没有很好地记录,但作者将其描述为指数最坏情况,
n^2
平均值。     
计算对称性似乎是一个二阶问题。在第二张图中只取a,b,c和d,就必须表达对称性
a(b,c,d) = b(a,d,c)
以及它的所有排列,或者其中一些。考虑添加第二个子图a',b',c',d'。同样,我们有对称性,但参数化方式不同。 对于计算人(而不是数学人),我们能表达这样的问题吗?   每个图节点都包含一组字母。在每次迭代中,每个节点中的所有字母都通过箭头复制到其邻居(一些箭头需要多次迭代,并且可以被视为匿名节点的管道)。      我们正在努力找到确定诸如此类事物的有效方法   * N次迭代后每个集合/节点包含的字母数。   *对于每个节点,N之后其集合不再变化。   *什么样的节点集合包含相同的字母集(等价类) ?     

要回复问题请先登录注册