找到两个顶点子集之间的最小距离

时间:2013-12-25 16:54:11

标签: algorithm data-structures graph

给定无向图G =(V,E),V1,V2是V的子集。 d(V1,V2)=min d(v1,v2)
所以我需要弄清楚如何在O(|V|+|E|)

中找到d(V1,V2)

如果enter image description hered(V1,V2)=0

否则,我从V1中随机选择v1'并运行BFS(V1,v1'),从v1中保存最远的顶点 在v1'' 我会对V2中的一些随机顶点v2'做同样的事情。 return d(V1,V2)= min {d(v1',v2'),d(v1',v2''),d(v1''v2'),d(v1'',v2'')} < / p> 那会有用吗?由于BFS的运行时间为O(| V | + | E |),因此建议的算法将在O(| V | + | E |)中运行

1 个答案:

答案 0 :(得分:5)

IMO您可以做的如下:

  1. 扫描集合V1并记下从V1节点开始的所有边缘,并以不在V1中的节点结束。
  2. 现在将V1中的所有节点组合成一个节点。步骤1中记录的边缘应是从该节点出来的边缘。
  3. 为V2做同样的事情。
  4. 现在它减少到节点V1和V2之间的最短路径问题。这可以通过在节点V1上进行简单的BFS或在O(E)中进行V2来解决,其中E是图中边的数量。