【问题标题】:brute-force graph isomorphism with networkx与networkx的蛮力图同构
【发布时间】:2015-06-22 15:31:09
【问题描述】:

我正在尝试编写一种蛮力方法来检查两个图是否同构。我正在使用类 networkx,但我不想使用内置函数进行同构。
我知道我必须检查图形的所有节点排列,但我不知道该怎么做。那么我将如何排列 networkx 图中的节点呢?

【问题讨论】:

  • 您为什么不想使用内置函数来执行此操作?
  • 我有几种不同的方法来检查同构,并希望看到运行时间的差异。也可以作为练习。

标签: python networkx brute-force isomorphism


【解决方案1】:

下面给出了一个图 H 的节点的所有排列的列表。

from itertools import permutations

list(permutations(H.nodes(), len(H.nodes()))

之后,您可以比较它们的邻接矩阵。见以下代码:https://github.com/jgloves/graphTheory/blob/master/are_isomorphic.py

【讨论】:

  • 您给定的代码似乎不起作用。首先,它不知道第 42 行中的属性 all。如果我将其更改为 if np.array_equal(a_h, a_g):,它永远不会是真的,这很奇怪,因为它应该是。有什么想法吗?
  • 对不起,那是几年前写的。感谢您了解这一点。
  • 尝试:A = (a_g == a_h),然后 if (elt for elt in A):
  • 如果我把它改成这样,那么除了E~F 之外的都是True,这仍然是不对的。
  • 如果 (a_g - a_h).nnz == 0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 2013-09-14
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多