【问题标题】:Exact (Error-Correcting) Graph Matching Algorithm精确(纠错)图匹配算法
【发布时间】:2016-01-29 16:32:46
【问题描述】:

我正在寻找一种不精确的图匹配算法,用于带有标记的顶点和标记的有向边的图。我的任务是检测对两个图表的更改以将它们显示给开发人员(想想颠覆差异)。我已经实现了基于禁忌搜索 (this) 的优化算法,但我无法让算法考虑我的边缘标签。我的图最多有 120 个顶点和 200 条边,所以我可能会使用更慢但更易于实现的算法。

这里有一个示例供您欣赏:

【问题讨论】:

  • “不精确匹配”是什么意思?另外,您要做什么-图形布局?最后,优化算法如何适应这里?也许您正在匹配布局模板或其他东西。
  • 不精确匹配是指“纠错”匹配,因为第二个图可能会发生变异(标签、插入/删除的顶点、插入/删除的边)。我的任务是检测这些图表的变化以将它们显示给开发人员(想想颠覆差异)。优化算法是我当前的算法,但我无法自定义它以尊重我的边缘标签,因此在高度对称的图中,匹配非常糟糕。
  • 顺便问一下,“我无法让算法考虑我的边缘标签”是什么意思?您提到的算法似乎能够处理边缘标签。
  • 部分文字陈述如此,但文字未提及细节。我尝试了 2 种方法:使用全局 Page Rank 值中的标签和使用本地相似度值中的标签。但我无法让它正常工作。我敢打赌我忽略了一些东西。

标签: algorithm graph


【解决方案1】:

由于没有人提出现有算法,我将尝试发明一个......

对于每个顶点,您可以通过将其标签与所有相邻边的标签连接起来来计算其“签名”。为保持一致性,请按字母顺序对标签进行排序。由于边是有向的,因此分别连接传入和传出边。

这些签名可用于检测顶点集的变化。首先,在第一个和第二个图中找到具有相同签名的对应顶点。剩余的不成对顶点是添加的顶点、删除的顶点、具有更改标签的顶点、具有更改边连接的顶点以及更改了边标签的顶点。您可以通过比较它们的签名并使用一些string matching algorithm 选择最佳匹配来关联它们。显然,您必须引入一些关键程度的相似性来区分“它是具有许多更改属性的同一个顶点”和“它是具有一些意外签名相似性的新顶点”。

将第一个图的所有顶点以任意顺序排列在一个数组中。创建另一个相同大小的数组。将第二个图的匹配顶点放入第二个数组中对应第一个数组的位置;对所有完全匹配的顶点和所有修改的顶点执行此操作。对于在第二个图中没有匹配的第一个图顶点(已删除的顶点),请将数组单元格留空。然后,对于在第一个图中没有匹配的第二个图顶点(新顶点),将这些顶点添加到第二个数组的末尾,并用相应数量的空单元格展开第一个数组。

现在,当一个图的顶点列在一个数组中时,边可以表示为一个二维数组。如果一条边从第 i 个顶点到第 j 个顶点,则将其标签放入数组的 (i,j) 单元格中。

对两个图表都这样做。由于您已经构建了两个相同大小的顶点数组,因此您将获得两个相同大小的二维数组,并具有一一对应的关系。通过直接比较这两个数组,您可以检测添加的边缘、移除的边缘和更改标签的边缘。

【讨论】:

  • 这似乎与我的初始算法相似。这里的问题是它忽略了图的实际结构。在具有许多相似节点、镜像段、没有标签的顶点的图中……这完全失败,这是不可接受的。
  • 我目前的算法(解决方法):初始分配具有唯一且相等的节点。每一步,从任何已经匹配的节点展开匹配。当展开过程中没有新的匹配,但未分配的顶点匹配最有希望的顶点并再次展开。重复。这里最大的禁忌是初始分配必须 100% 正确。我图中的一些是(始终属于彼此的特殊顶点)。但是当变化太多时,算法很快就会崩溃。
  • @SirPolly,是的,我的建议假设大多数顶点和边都有标签,并且大多数标签都是唯一的。一种可能的想法是在签名中不仅包括相邻的边标签,还包括相邻的顶点、下一级边等。但是在大的重复块的情况下,这也会失败。扩展算法的一个可能改进是尝试选择不同的起始匹配(即使具有不同的标签),然后比较扩展结果。当然这会慢很多。关于禁忌搜索,您可能可以联系文章作者并询问他们省略的详细信息。
  • vldb.org/pvldb/vol8/p1010-kazemi.pd - 这个算法类似于我的临时方法,但经过适当的研究。
猜你喜欢
  • 2016-01-18
  • 1970-01-01
  • 2022-07-01
  • 2011-08-05
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2018-10-16
相关资源
最近更新 更多