【问题标题】:Graph Isomorphism Algorithm [duplicate]图同构算法[重复]
【发布时间】:2011-11-15 12:24:08
【问题描述】:

可能重复:
Graph Isomorphism

图同构是否有任何众所周知的启发式方法。如果有人知道,请告诉我任何好的且易于理解的图同构算法。

【问题讨论】:

  • Brendan McKay 是 nauty 的作者,这是用于图同构的最先进的软件。 This paper of his 解释了一些想法。
  • 可以通过将两个图视为一个图并检查对称性/自同构来检查图同构。这可以使用saucy 比使用 nauty 更快地完成。免责声明:我是 saucy 的合著者。

标签: algorithm graph graph-algorithm


【解决方案1】:

检查不具有病态统一结构的图之间的同构性的简单但有效的方法是选取一个节点不变量,计算所有节点的不变量的值,然后执行(深度优先)搜索实际同构仅在每个配对节点时具有相同的节点不变量值。节点不变的想法是它是一个对象(通常是数字或数字序列),它以完全独立于图形表示的方式为节点计算;即在选择表示形式时它是不变的。

例如,一个节点的邻居数量是一个不变量,但程序迭代节点邻居的顺序并不取决于表示(数据结构)。

通常节点不变量是迭代计算的,例如这个简单的不变量 I[n] 其中 n 是一个节点,I[n] 是无符号 32 位整数:

for every node in graph:
  I[node] = count_neighbors(node)
for i = 0 .. N: # N is a constant, number of iterations
  for every node in graph:
    I'[node] = (I[node] << 13 | I[node] >> 19) ^ 0xff00ff00
    for every node' in neighbors(node):
      I'[node] += I[node']
  for every node in graph:
    I[node] = I'[node]

这些类型的不变量在实践中可以区分非均匀图中的大多数节点,从而在实践中加快搜索阶段。

【讨论】:

  • 我得到了你计算图形度数的想法,我也在想类似的事情,但是一旦我们计算了度数并拒绝该图形,如果一个图形与另一个图形不兼容,那么之后怎么办您使用 DFS 解释的步骤是什么,您能否详细说明一下,以及第 4 行之后伪代码在做什么。谢谢
  • 伪代码基本上是计算节点的哈希值;这是“不变量”。具有位移和异或的东西只是一种使不变量具有较少虚假碰撞的方法。缺少对实际同构搜索的 DFS 搜索,真的……这将是另一大堆伪代码 :)
猜你喜欢
  • 2011-02-09
  • 2023-03-12
  • 2012-03-19
  • 2011-01-14
  • 2013-08-27
  • 2012-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多