枚举一定大小的所有非同构图


30

我想枚举所有大小为无向图,但是我只需要每个同构类的一个实例。换句话说,我想枚举个顶点上的所有非同构(无向)图。我怎样才能做到这一点?nn

更准确地说,我想要一种算法,该算法将生成具有以下特性的无向图的序列:对于个顶点上的每个无向图,都存在一个索引,使得与同构。我希望该算法尽可能高效。换句话说,我关心的指标是生成和迭代此图列表的运行时间。第二个目标是,如果算法不太复杂而无法实现,那就太好了。G1,G2,,GkGniGGi

请注意,每个同构类至少需要有一个图,但是如果该算法产生多个实例,则可以。特别是,如果输出序列包含两个同构图,则可以,只要这可以帮助您更轻松地找到这样的算法或启用更有效的算法,只要它覆盖所有可能的图即可。

我的应用程序如下:我有一个程序要在大小为所有图形上进行测试。我知道如果两个图是同构的,则我的程序将在两个同构上表现相同(对两个图都正确,或者对两个图都不正确),因此足以枚举每个同构类的至少一个代表,然后对其进行测试。对这些输入进行编程。在我的应用程序中,很小。nn

我考虑过一些候选算法:

  • 我可以列举所有可能的邻接矩阵,即所有对称的 0或1矩阵,对角线都为0。但是,这需要枚举矩阵。这些矩阵中有许多将表示同构图,因此这似乎在浪费大量精力。n×n2n(n1)/2

  • 我可以列举所有可能的邻接矩阵,并针对每个矩阵测试它与我先前输出的任何图是否同构;如果它与之前输出的内容不是同构的,则将其输出。这将大大缩短输出列表,但是仍然需要至少个计算步骤(即使我们假设图形同构检查是超快的),因此通过我的指标。2n(n1)/2

  • 可以枚举邻接矩阵的子集。特别是,如果是个顶点,则可以不失一般性地假设顶点的排列方式为。换句话说,每个图都是同构的,其中顶点以非降序排列。因此,仅枚举具有此属性的邻接矩阵就足够了。我不知道这样的邻接到底有多少矩阵也有,但它是许多不到他们可以用比少很多被列举GnV={v1,,vn}degv1degv2degvn2n(n1)/22n(n1)/2计算步骤。但是,这仍然留下了很多冗余:许多同构类仍然会被覆盖很多次,因此我怀疑这是最优的。

我们可以做得更好吗?如果我理解正确,大约是非同构图的等价类。我们能否找到一种运行时间比上述算法更好的算法?我们可以接近下界?我主要关心小(例如或左右;足够小以至于可以合理地运行这样的算法来完成),而不是大的渐近性。2n(n1)/2/n!2n(n1)/2/n!nn=5n=8n

相关:构建不等价的二元矩阵(尽管不幸的是,似乎没有收到有效的答案)。


1
Afaik,甚至大小为直至同构的图的数目都是未知的,因此,我认为不可能有一种(非蛮力)算法。关于您的候选算法,请记住,我们不知道用于检查图同构性(afaik)的多项式时间算法,因此任何应该在运行的算法都应避免检查同构(经常/不正确)。(另外,。)nO(|output|)|output|=Ω(n|classes|)
拉斐尔

@Raphael,(1)我知道我们不知道大小为同构图的确切数目,但是这个问题并不一定需要知道(例如,由于我对重复是可以接受的)。我不知道为什么这意味着不可能有比我给出的算法更好的算法。(2)是的,我知道没有用于图形同构的多项式时间算法,但是在这里我们将讨论值,例如,所以现有的算法可能会很快-无论如何,我只提到了该候选算法拒绝它,因此无论如何都没有意义。nnn=6
DW

对于最多6,我相信在选择了顶点的数量和边的数量,并按照您的建议将顶点标签按度降序排列后,将几乎没有同构类。在这一点上,使用诸如NAUTY或BLISS的蛮力同构检查来对其余案例进行分类可能变得可行。n
西蒙(Simon)

Answers:


19

枚举小顶点数量的所有非同构图的最简单方法可能是从Brendan McKay的收藏集中下载它们。枚举算法在McKay [1]的论文中进行了描述,并通过所有可能的方式扩展大小为n-1的非同构异构体并检查新顶点是否为正则来工作。它是按照gengMcKay的图同构检查器实现的nauty

[1]:BD McKay,“标记枚举技术的应用”,Consumus Numerantium,40(1983)207-221。


我有个问题。n-1正如您所说,我正在绘制一个大小图,并以所有可能的方式将其扩展到一个顶点。然后,我检查顶点是否具有规范标签,例如1(规范顶点?!)。但是,如果图仅是规范形式的同构,且顶点具有不同的标签怎么办?我试图检查自同构性,以查看带有标签的顶点1是否在同一轨道上,但随后我在列表中两次出现该图。这篇论文对我没有帮助。另外,由于所有这些二进制优化和几乎没有注释,geng的源代码不可读。
亚历克斯(Alex)

1
@Alex您肯定想要确定新顶点是否与1处于相同轨道的检查版本。能否举一个示例,其中产生两个同构图?作为一个新问题,也许会更好。
David Eisenstat 2015年

好的,非常感谢!我想在那种情况下“以所有可能的方式扩展”需要以某种方式考虑带有n-1顶点的图的自同构?例如n = 3,我以前的图形是P2。然后,我将第三个顶点连接到先前一个顶点的两种情况当然会产生相同的图形P3。您能否迅速解释一下如何正确地“以所有可能的方式扩展”,还是我应该再问另一个问题?(此外,有时我对发生的事情感到困惑,因为我的程序需要查找特殊类型图的非同构性,这会使事情变得更加复杂)
Alex

@Alex是的,扩展名本身似乎需要规范。可能值得提出一个新问题,因为我不记得这是怎么回事了。
David Eisenstat 2015年

1

4

我建议对您的第三个想法进行改进:逐行填充邻接矩阵,并跟踪顶点的度和邻接度与先前填充的顶点等效的顶点。因此,最初,等价类将由具有相同程度的所有节点组成。
当新填充的顶点仅与某些等效节点相邻时,任何选择都将导致来自相同同构类的表示。因此,我们仅考虑赋值,即当前填充的顶点与具有最高编号的等价顶点相邻(并在其余过程中将等价类分为两个)。

我认为(但尚未尝试证明)这种方法涵盖了所有同构。 对于较大的图,我们可能基于以下事实而得到同构:在具有边和(且没有其他边的子图中,我们有两个等效的顶点组,但是不能通过该方法。(它当然可以扩展,但是如果您仅针对,我怀疑这样做是否值得。)n<6
(1,2)(3,4)n=6

该算法的一个简单的实现会陷入死胡同,结果证明无法根据给定的度数集和先前的分配来填充邻接矩阵。尽早检测/过滤这些可能值得一些努力。一些想法:

  • 如果度数之和是奇数,则它们将永远不会形成图
  • 填充需要立即连接到所有/所有其余顶点的顶点的条目。

3

这些论文可能很有趣。

“关于图形的简洁表示”,Gyorgy Turan,离散应用数学,第8卷,第3期,1984年7月,第289-294页 http://www.sciencedirect.com/science/article/pii/0166218X84901264

“一般的未标记图的简洁表示”,Moni Naor,离散应用数学,第28卷,第3期,1990年9月,第303-307页 http://www.sciencedirect.com/science/article/pii/0166218X9090011Z

它们提供了用于对顶点标记的图进行编码的编码和解码功能,以便当且仅当一个因置换另一个顶点的顶点标记而导致时,两个这样的图才会映射到同一代码字。

此外,证明了编码和解码功能是有效的。

第一篇论文涉及平面图。在第二篇文章中,消除了平面度限制。

编辑:本文可能也相关:

拟多项式时间中的图同构,芝加哥大学Laszlo Babai,arXiv上的预印本,2015年12月9日, http://arxiv.org/pdf/1512.03547v1.pdf

巴拜宣布他的研究结果成为了新闻:https : //www.sciencenews.org/article/new-algorithm-cracks-graph-problem

但是,也许我错把OP问题与这三篇论文混淆了吗?OP希望枚举非同构图,但是拥有确定两个图何时为同构图的有效方法可能仍会有所帮助。


我很欣赏这个想法,但恐怕我不是要问如何确定两个图是否同构。我真的在问如何枚举非同构图。恐怕描述用于测试两个图是否同构的算法并不能真正帮到我,尽管谢谢您的尝试!
DW

Turan和Naor(在我上面提到的论文中)构造了您描述的类型的函数,即,将图映射到该图所属的等价类的规范表示中。如果您可以列举这些规范代表,那么似乎可以解决您的问题。
西蒙(Simon)


1

九十年代初有一篇论文专门讨论了这个问题:

Leslie Goldberg 列出未标记图高效算法

该方法可确保每个同构类的一个代表都被精确枚举,并且在两个后续图的生成之间仅存在多项式延迟。

这里提出的方法不允许这样的延迟保证:在发现一个新的同构类之前,可能有成倍的()邻接矩阵被枚举,并且发现它们与某些先前枚举的图是同构的。n

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.