【问题标题】:How would you verify that two colored planar graphs are isomorphic?你将如何验证两个彩色平面图是同构的?
【发布时间】:2012-10-01 13:07:37
【问题描述】:
推断两个彩色平面图是否同构的算法是什么?我知道同构对于一般的图来说是一个难题,但是,根据维基百科,如果图是平面的,则可以解决。
该算法的应用将是推断用一些基于图形的数据结构表示的两个平面分子是否相同(同构)。由于节点代表原子,因此图表的颜色只是原子的类型(氢、碳、氮等)。
【问题讨论】:
标签:
algorithm
computer-science
graph-theory
【解决方案1】:
试用 NetworkX 库
您没有提到您对哪种编程语言感兴趣,但用于 python 的NetworkX library 有多种查找同构的方法。您可能想查看他们的implementation of the VF2 algorithm,其中包括子类化和定义“语义”评估的能力,该评估将解决您的问题中的原子元素匹配问题。语义评估已经在算法中,但具有始终返回 true 的占位符函数,因此如果您将占位符函数替换为评估原子元素的占位符函数,则算法类可能会为您工作,否则无需修改。
或者,您可以运行算法以匹配形状,然后查看GM.mapping 参数(请参阅实现链接)并比较每个同构中等效节点处的元素是否具有元素等效性。
如果您正在寻找通用算法而不是编程库,请尝试这篇论文(PDF here,没有付费专区):
L. P. Cordella、P. Foggia、C. Sansone、M. Vento,“改进的
匹配大图的算法”,第 3 届 IAPR-TC15 Workshop on Graph-based Representations in Pattern Recognition,Cuen,第 149-159 页,2001 年
2015 年 11 月更新:显然一位教授已经想出了如何在子 NP 时间内做到这一点!他还没有发表,但here's a starter link 为那些纯数学的人。
【解决方案2】:
我声称如果两个节点具有相同的度数,则一个图中的节点只能通过图同构映射到另一个图中的节点。
您可以创建一个带有任意度数节点的小型平面图,方法是将该节点置于中心,放置节点以构成其周围的度数,并在中心节点和所有其他节点之间创建链接。通过将其缩小到您喜欢的程度,您可以安排将其作为子图添加到给定平面图的任何节点,而不会使其成为非平面。
给定一个带有彩色节点的平面图,找到其中任何节点的最大度数,并在此之上创建小的度数子图作为颜色标记:为每种颜色赋予其自己的度数并链接该度数的单独小子图到该颜色的每个节点。
现在解决这个增强图上的平面图同构问题,您就有了原始图的解决方案。类似地,任何原始图的解都可以很容易地转化为增广图的解。
【解决方案3】:
This paper(我在 citeseer 上找到的)似乎很有用,因为它包括算法(大纲)和与其他算法的一些可能有用的基准比较,它还提供了参考书目。但是,我怀疑您正在查看的问题的规模不会出现在 Kukluk 等人的配置文件中。图形映射器胜过其他算法。
通用平面图同构算法甚至不尝试利用节点“颜色”(我会说标签,因为我通常认为颜色应用于边缘,但这并不是很重要),你可能会很好能够通过使用附加信息做得更好。但可以肯定的是,如果不存在未着色/未标记的同构,那么就不可能存在着色/标记的同构。不幸的是,能够构建单个同构不足以决定是否存在带有颜色/标签的同构;你需要尝试所有可能的同构。我认为分解留下的信息足以简化此搜索,但我不确定;这似乎是一个有趣的问题。
我了解您有一个特定的编程问题,并且确实(并且应该)偏向于您对解决方案的搜索。所以请随意忽略以下一点:着色/标记同构在理论上不可能比一般同构更容易,因为所有节点都具有相同的颜色/标签是有效的。 (我认为这与您的环境完全无关,因为您的目标分子都不会由单一元素组成,对吧?)