寻找最长的匹配设备链

时间:2011-11-29 21:26:53

标签: algorithm graph-algorithm

Set A有n个设备。 B组有m个设备。 A中的某些设备与B中的设备兼容,B中的某些设备与A中的设备兼容。

我希望尽可能多的兼容设备相互连接。 (没有必要让A中的设备a和B中的b相互兼容。)

为了清晰起见而编辑:任何设备都可以链接到0,1或2个其他设备,但不能链接到自身。

最终所有设备(或两个以外的所有设备,如果“端”不符合)应在1对1上链接在一起。可以将任何一个设备链接到任何其他设备。但A中的任何设备都不与A中的任何设备兼容(但它们可链接),B中的设备也是如此。

If I have A = {a1,a2,a3}, B = {b1,b2,b3} and n=m=3

a1 is compatible with b1,b2
a2 is compatible with b1
a3 is compatible with b1
b1 is compatible with a1,a3
b2 is compatible with a1
b3 is compatible with a1

然后是图G

a1 <-> b2 <-> a2 <-> b1 <-> a3 <-> b3 <-> a1

是最佳图表。

G不一定是循环的,但它可以是。

有没有聪明的方法来解决这个问题?

2 个答案:

答案 0 :(得分:3)

我认为这个问题是NP难以通过从无向的最长路径问题的减少来解决这个问题,这个问题通过从无向哈密顿路径问题的减少而被认为是NP难的(参见Sipser的计算理论导论) 有关原因的详细信息。)

在无向最长路径问题中,我们作为输入给出了无向图G =(V,E),以及一对节点u和v以及一些数字k,并且想要确定是否存在简单(没有节点出现两次)从u到v的路径长度至少为k。我们可以使用多项式时间缩减将其转换为您的问题,如下所示:

  • 对于每个节点v i ∈V,A中有一个设备(称之为d i )。
  • 对于每个边{v i ,v j }∈V,B中有一个设备(称之为e i,j )。
  • 对于每个节点v i 和edge {v i ,v j },设备d i 是与设备e i,j 兼容。

该减少具有多项式大小,因为生成的设备总数为| V | + | E |并且连接数是2 | E |。此外,我们可以看到,如果从d开始存在长度为2k + 1的设备链,则在图G中存在从v i 到v j 的长度为k的路径。 i 到d j 。具体来说,如果((v i 1 ,v i 2 ),(v i 2 ,v i 3 ),...,(v i k - 1 ,v i k ))是从v i 到v j 的简单路径,然后链d i 1 →e i 1 ,i 2 →d < sub> i 2 →e i 2 ,i 3 →d i < sub> 3 →...→e i k - 1 ,i k →d k ,反之亦然。因此,我们有一个从无向最长路径到你的问题的多项式时间减少如下:

  • 将无效的最长路径问题作为输入(G,v i ,v j ,k)给出:
    • 如上构建集合A和B,兼容性C如上所述。
    • 检查从d i 到d j 是否存在长度为2k + 1的设备链。
    • 如果是,请输出“是”
    • 如果没有,请输出“no。”

这种减少使用求解器解决了非确定多项式时间中的无向最长路径问题,因此你的问题是NP难的。因此,您不应期望为您的问题找到多项式时间算法;找到一个确切的答案可能需要指数时间,除非P = NP。

很抱歉给出否定答案,但我希望这有帮助!

答案 1 :(得分:1)

这是np-hard但我认为最大周期覆盖问题近似可以帮助你(在每个组链接设备的边缘大小为0),你也可以添加一些额外的节点,按重量连接到所有其他节点0) ,例如本文:Approximating Maximum Weight Cycle Covers in Directed Graphs with Weights Zero and One将帮助您。