python中的两个图是不是同构,没有导入

Posted

技术标签:

【中文标题】python中的两个图是不是同构,没有导入【英文标题】:Are two graphs isomorphic in python, no importspython中的两个图是否同构,没有导入 【发布时间】:2018-05-23 01:04:24 【问题描述】:

我正在编写一个函数is_iso(graph1, graph2),它将两个图作为其输入,然后确定这两个图是否同构。

我可以假设这两个图将具有相同数量的顶点,并且顶点上使用的名称将相同。

is_iso(“A” : [“B”, “C”], “B” : [“A”], “C” : [“A”], “A” : [“B”], “B” : [“A”, “C”], “C” : [“B”]) 应该返回 True

is_iso(“A” : [“B”, “C”], “B” : [“A”, “C”], “C” : [“A”, “B”], “A” : [“B”, “C”], “B” : [“A”], “C” :[“A”]) 应该返回 False

def is_iso(graph1,graph2):
    for vertex in graph1:#loops through every vertex in graph1 
         seq1 += [len(graph1[vertex])]#adds the degree of each vertex to the list

    for vertex in graph2: #loops through every vertex in graph2 
        seq2 += [len(graph2[vertex])]#adds the degree of each vertex to the list

    return sorted(seq1) == sorted(seq2) 

我所有的方法目前都检查度数序列是否相同,但图可以具有相同的度数序列并且不是同构的。我不确定如何从这里完成检查。我不允许导入任何库。非常感谢任何帮助!

【问题讨论】:

图同构是一个难题(推测在 P 和 NP 完全之间)。整本书都写过它。您期望在 Stack Overflow 上描述图同构算法是不合理的(尽管某些版本的小图蛮力是足够合理的)。你决定使用什么算法?如果你不知道——研究一下。如果您在实施过程中遇到特定问题,请提出问题。 上述问题在顶点上使用相同的名称,因此它很容易并且不适合困难问题的广义同构类。只需直接排序和比较... OP 已经实现并尝试做的事情。 @tom10 我不这么理解这个问题——没有限制说"A" 只能映射到"A",所以仍然有n! 潜在的同构。 @JohnColeman:也许我误解了......当问题指出“......顶点上使用的名称将是相同的”时还有什么意思 @JohnColeman:是的,这是一个有效的定义。我认为问题在于labeled graphs 的“同构”有两种定义。 【参考方案1】:

最简单的可能实现就是暴力破解。我们需要在其中一张图中尝试所有可能的起点:

for all start points v1 in G1
    try to find an isomorphism rooted at v1 in G1 to any of v2 in G2

但是第二行是什么意思?!嗯,像这样:

for each neighbour i in G1[v1]
    for each neighbour j in G2[v2]
        match(i, j)

请注意,我们还必须跟踪到目前为止已匹配的节点,并在找到匹配项后立即返回 true。

我们可以通过使用度数序列来改进问题 - 显然每个图中相同度数的顶点必须匹配,因此仅将这些视为匹配的候选者。

当然,还有更复杂的算法,但只有在您需要速度或拥有大型图表时才真正重要。作为参考,考虑 VF2 算法:

VF2 algorithm steps with example

【讨论】:

我们可以看看一些工作代码吗? @RobinAndrews 我可以做到……但为什么呢?最初的问题是 4 岁,所以希望提问者现在已经实施或继续前进。如果有人真的想检查两个图的同构,他们应该使用 nAUTy/traces 或 Weisfeiler-Lehman,或者像我说的 VF2。或者只是实现VF2算法,没那么难。 我会帮助我从第一原则理解问题。我发现编写代码(包括其他人的)是理解算法和数学概念的最佳方式。使用库或复杂的实现并没有同样的帮助。

以上是关于python中的两个图是不是同构,没有导入的主要内容,如果未能解决你的问题,请参考以下文章

图同构的矩阵初等变换判定及算法设计

并查集之图的同构(同构图)-概念未清

有向无环图的哈希值

Vijos 有根树的同构问题字符串---最小表示法

图论----同构图(详解)

美术-同构图形:百科