免责声明:我是图论的新手,我不确定这是否属于SO,Math SE等。
给定2个邻接矩阵A和B,我如何确定A和B是否同构。
例如,A和B不是同构的,C和D是同构的。
A = [ 0 1 0 0 1 1 B = [ 0 1 1 0 0 0
1 0 1 0 0 1 1 0 1 1 0 0
0 1 0 1 0 0 1 1 0 1 1 0
0 0 1 0 1 0 0 1 1 0 0 1
1 0 0 1 0 1 0 0 1 0 0 1
1 1 0 0 1 0 ] 0 0 0 1 1 0 ]
C = [ 0 1 0 1 0 1 D = [ 0 1 0 1 1 0
1 0 1 0 0 1 1 0 1 0 1 0
0 1 0 1 1 0 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0 0 1
0 0 1 1 0 1 1 1 0 0 0 1
1 1 0 0 1 0 ] 0 0 1 1 1 0 ]
(sorry for this ugly notation, I'm not quite sure how to draw matrices on SO)
以下是我开始算法的原因(请原谅我缺乏数学严谨性)请帮我完成/纠正!
答案 0 :(得分:7)
答案 1 :(得分:4)
我的项目 - Griso - 位于sf.net:http://sourceforge.net/projects/griso/,其描述如下:
Griso是一个用C ++编写的图形同构测试实用程序,它基于我自己的算法
请参阅此页面上的Griso示例输入/输出:http://funkybee.narod.ru/graphs.htm
答案 2 :(得分:0)
嗯,通过执行以下操作很容易快速判断出它们不是同构的。
areIsomorphic(G1, G2):
if(G1.num_verticies != G2.num_verticies)
return False
if(G1.num_total_edges != G2.num_total_edges)
return False
for each vertex v in G1:
if( G2.find(v).edges != v.edges):
return False;
//Try and find a property in graph G1 that does not exist in G2.
// Use a heuristic. ie- try and find nonmutually adjacenct sets.
答案 3 :(得分:0)
一般来说,证明两个图是同构的并不是一件简单的事情。出于这个原因,我们必须考虑同构图的一些性质。这意味着如果图是同构的,则必须满足这些属性。如果给定的图不满足这些性质,那么我们可以说它们不是同构图。
性质:两个图是同构的,当且仅当它们的顶点的某些排序它们的邻接矩阵相等。
基于上述性质,我们可以决定给定的图是否同构。为了检查属性,我们需要做一些矩阵变换操作。