给定两个图(A和B),我试图根据边权重的差异来确定是否存在B的子图,其匹配A给定一些阈值。也就是说,如果我取每对相关边之间的差值之和,它将低于指定的阈值。顶点标签在A和B之间不一致,所以我只是依靠边权重。
A将稍微小(例如,最大10)并且B将更大(例如,最大200)。
答案 0 :(得分:0)
我相信这两个套餐中的一个可能有所帮助:
MATLAB中的图形匹配工具箱“实现了与仿射约束(SMAC)的谱图匹配,可选地使用kronecker双原理归一化”。它在网页上声明它“处理不同大小的图形(子图匹配)” http://www.timotheecour.com/software/graph_matching/graph_matching.html
MATLAB中的图匹配工具箱中使用的算法基于Timothee Cour,Praveen Srinivasan和Jianbo Shi题为Balanced Graph Matching的论文中描述的算法。该论文发表在NIPS 2006上。
此外,有一个名为Graph Matching Toolkit(GMT)的第二个工具包似乎可能支持容错子图匹配,因为它支持容错图匹配。它不是使用光谱方法,而是有各种计算编辑距离的方法,然后我的印象是它通过给出最小编辑距离的argmax来找到最佳匹配。如果它没有明确支持子图匹配并且你不关心效率,你可能只搜索B的所有子图并使用GMT来尝试在A中找到那些子图的匹配。或者你可能只搜索一个子集的B的子图 http://www.fhnw.ch/wirtschaft/iwi/gmt
不幸的是,这些似乎都不在Python中,它们似乎也不支持networkx的图形格式。但我相信您可能能够找到一个转换器,它可以将networkx图表的表示更改为这些工具包可用的内容。然后,您可以运行工具包并输出所需的子图匹配。