我需要帮助才能找到图算法
我正在研究与距离函数相关的以下等式
d (g1, g2) = 1- │mcs(g1,g2) │ /
│g1│+│g2│-│mcs (g1, g2) │
哪里
d (g1,g2)
:是基于最大公共子图的距离函数
g1, g2
是两张图。mcs (g1,g2)
:是两个图g1,g2的最大公共子图
其中mcs是最大的图形(通过一些涉及数字的度量)
两个主题图中包含的节点和边缘。│g1│
:共同诱导子图g1的基数│g2│
:共同诱导子图g2的基数我的问题:如何计算MCS? 我搜索了互联网,但大多数算法都很复杂,任何人都知道从哪里可以得到一个简单的算法来编写matlab中的这个方程。
答案 0 :(得分:4)
问题是NP-Complete 1 。
Clique Problem 2 的减少。给定一个Clique问题实例 - 图表G=(V,E)
,创建一个完整的clique G'=(V,E')
,使E' = {(u,v) | u != v, for each u,v in V)
。
最大团问题的解决方案是针对G和G'的最大子图问题的解决方案。由于集团问题是NP-Hard,这个问题也是如此。
因此,没有已知的多项式解决方案来解决这个问题。
如果您正在寻找精确的算法,可以尝试exhaustive search方法和/或branch & bound方法来解决它。对不起消息感到抱歉,但至少你知道不要寻找(可能)不存在的东西(当然除非P=NP)
编辑:指出暴力解决问题的方法:
您可以检查所有可能的子集,并检查它是否是可行的解决方案。
伪码:
findMCS(vertices,G1,G2,currentSubset):
if vertices is empty: //base clause, no more candidates to check
if isCommonSubgraph(G1,G2,currentSubset):
return clone(currentSubset)
else:
return {}
v <- vertices.pop() //take a look at the first element
cand1 <- findMCS(vertices,G1,G2,currentSubset) //find MCS if it is NOT in the subset
currentSubset.append(v)
if isCommonSubgrah(G1,G2,currentSubset): //find MCS if it is in the subset
cand2 <- findMCS(vertices,G1,G2,currentSubset)
currentSubset.remvoe(v) //clean up environment before getting back from recursive call
return (|cand1| > |cand2| ? cand1 : cand2) //return the maximal subset from all candidates
上面的复杂性是O(2^n)
(检查所有可能的子集),并使用:findMCS(G1.vertices, G1, G2, [])
调用它(其中[]
是一个空列表)。
注意:强>
isCommonSubgrah(G1,G2,currentSubset)
是一种易于计算的方法,当且仅当currentSubset
是G1和G2的公共子图时才会回答真实。(1)假设最大子图是U
中的子集V
,以便u1,u2
U
中的每个(u1,u2)
都在{{1} } {当且仅当E1
在(u1,u2)
中时(直观地说,在两个图中共享完全相同边的顶点的最大子集)
(2)Clique问题:给定E2
中G=(V,E)
找到最大子集U
的实例,以便V
中的每个u1,u2
:{{ 1}}或U
位于u1 = u2
。
答案 1 :(得分:1)
James J. McGregor提出的回溯搜索算法可用于识别两个图之间的MCS。
答案 2 :(得分:0)
你甚至无法检查一个图是否是另一个图的子图,它是已知为NP完全的subgraph isomorphism problem。因此,您无法找到最大子图,因为您无法检查同构属性(在多项式时间内)。
答案 3 :(得分:0)
主要问题是找到原始图中节点之间的对应关系(实质上是顶点的重新编号)。例如,如果我们在图 g1 中有节点 p ,而在图 g2 中有节点 q ,其中 p 和 q 是等价的,我们想将它们映射到公共子图 c 中的节点 s 。
Clique问题如此困难的原因在于,无需检查不同图中的两个节点是否实际引用同一节点,我们必须尝试所有可能的节点对组合并检查每对节点是否相同一致并代表“最佳”的对应关系。
由于这些图中的节点代表地理位置,我们应该能够提出合理的距离度量,告诉我们一个图中的节点与另一个图中的任何节点相同的可能性。由于两个节点的GPS坐标可能不相同,我们需要根据问题做出一些假设。
一旦你对节点进行了重新编号,就可以使用Jens建议的方法来找到重新编号的图形的交集。这一切都很一般,因为我没有很多关于你的具体问题的细节,但希望它足以让你开始。