用最少数量的简单路径覆盖无向图的所有边

时间:2011-11-16 07:44:04

标签: algorithm graph tree

给定一个非直接的图G,我想用最少的简单路径覆盖所有边。

例如,对于这样的图表,

   B     E
   |     |
A--C--D--F--G

A--C--D--F--G, B--C--D--F--E是最佳解决方案,而A--C--D--F--G , B--C , E--F则不是。{{1}}。

任何算法?

1 个答案:

答案 0 :(得分:2)

如@RafalDowgird在评论中所说,找到一条路径是否足够Hamiltonian Path Problem,即NP-Hard,并且没有已知的多项式算法来解决这些问题。

这为您提供了两个选项:

  1. 使用可能未经优化的启发式解决方案。 [附加示例算法]
  2. 使用指数解决方案,例如backtracking
  3. 对于选项一,您可以尝试一种贪婪的解决方案:

    while (graph is not covered):
       pick arbitrary 2 connected not covered vertices v1,v2
       if there are none matching: 
           choose an arbitrary not covered vertex
           add an arbitrary path starting from this vertex
       else:   
           choose the longest simple path from v1 to v2 [can be found with BFS/DFS]
           add this path
    

    对于选项二,一个天真的回溯解决方案将是

    1. find P={all possible paths}
    2. create S=2^P //the power set of P
    3. chose s in S such that for each s' in S: |s| <= |s'| and both s,s' cover all vertices.
    

    请注意,此解决方案为O(2^(n!)),因此虽然它是最佳的,但却不切实际。