我们最终做的是实现一个算法,描述在:“Heuristics for Chemical Compound Matching”。
我们使用 NetworkX 来表示抓地力和寻找最大集团。
编辑:
基本上,您创建一个新图,每个节点 (v) 表示图 A (a) 中的节点与图 B (b) 中的节点的可能配对。
如果在您的应用程序中两个节点 (a,b) 相似或不相似,则从新图中删除对应于不同配对 (a,b) 的节点 (v)。如果它们不相互矛盾,则将两个节点连接到一条边。例如,配对 (a,b) 和 (a,c) 相互矛盾(有关正式定义,请参阅文章)。然后,您会在新图中找到一个具有最大节点数的集团。
如果在您的应用程序中两个节点的相似性不是二元的,则您可以在一个范围内(例如 (0,1))赋予新节点的权重。您可以启发式地删除相似度等级低于预定义阈值的新节点。然后,您会在新图中找到一个具有最大权重(节点分配权重的总和)的集团。
无论哪种方式,您都会生成相似度等级:集团的大小/总权重除以原始图的属性的函数(A 和 B 的大小/权重的最大/最小/平均值)。
一个不错的功能是,您可以从发现的集团中推断出相似性的“来源”——“更强”的配对。
进一步说明:
约束取决于应用程序。我们使用该方法来比较成对的功能控制流图。通常,该方法找到第一个图中的某些节点与第二个图中的某些节点的匹配(子图到子图)。关联图中的每个节点表示来自第一个图中的单个节点与第二个图中的单个节点的可能匹配。由于最终选择了一个团(节点的子集),因此一条边意味着两个匹配项不相互矛盾。要申请不同的应用程序,您应该询问可能配对的标准是什么(或者我要创建哪些节点),以及选择一个配对如何影响另一个配对的选择(或者我如何将节点与边连接)。