我有一组子图,我需要在它们从中提取的图上匹配它们。我还需要计算每个子图在这样的图中出现的次数(我需要存储所有可能的匹配)。考虑到子图和图形的边缘标签,必须有一个完美的匹配,然而,顶点的标签不需要相互匹配。我使用JUNG API构建了我的系统,所以我想要一个可以处理JUNG提供的Graph结构的解决方案(api,算法等)。有什么想法吗?
答案 0 :(得分:0)
http://en.wikipedia.org/wiki/Subgraph_isomorphism_problem
NP-Completeness对你来说可能熟悉也可能不熟悉(我花了7年的大学时间和计算机科学硕士学位来理解它!),所以我将在这里给出一个高级别的描述。某些问题,例如排序,可以在多项式时间内根据其输入大小来解决。例如,如果我有一个 N 元素的列表,我可以在O( N log( N ))时间内对其进行排序。更具体地说,如果我能在多项式时间内解决问题,这意味着我可以解决问题,而不会耗尽所有可能的解决方案。在排序的情况下,我可以遍历列表的每个可能的排列,如果我找到了已排序的列表的排列,则返回它。这显然不是解决问题的最快方法!一些非常聪明的数学家能够将其降低到理论最小值O( N log( N )),因此我们可以使用它快速排序真正的大型事物列表今天的电脑。
另一方面,NP-Complete问题思考没有多项式时间解决方案(我说思考因为没有人证明它,尽管证据强烈表明情况就是这样)。无论如何,这意味着你无法在不首先解决所有可能的解决方案的情况下明确解决NP-Complete问题。 NP-Complete问题的时间复杂度始终为O( c ^ N )或更差,其中 c 为一些常数大于1.这意味着解决问题所需的时间随着问题规模的每次递增而呈指数级增长。
那么这与我的问题有什么关系???
我在这里得到的是,如果Subgraph Isomorphism问题是NP-Complete,那么你可以确定一个图是否是另一个图的子图的唯一方法就是用尽所有可能的解决方案。所以你可以解决这个问题,但可能只能解决几个节点的图形(因为问题的时间复杂度随着图形大小的每次递增而呈指数级增长)。这意味着为您的问题计算解决方案计算上不可行因为只要达到某个图表大小,就会花费很长时间才能找到解决方案。
更实际的是,如果你的老板要求你做一些可证明是NP-Complete的事情,你可以简单地说这是不可能的,他将不得不听你的。如果你的教授要求你做一些可证明是NP-Complete的东西,告诉他这是NP-Complete,你可能会获得一个A的课程。如果您正在尝试自行完成NP-Complete,那么最好继续下一个项目......;)
答案 1 :(得分:0)
好吧,我必须从头开始实施它来解决问题。我遵循了主题Any working example of VF2 algorithm?中建议的策略。所以,如果有人对此问题有疑问,我建议在上述主题中看看Rich Apodaca的回答。