在无向加权图中连接3个顶点的最小总和权重,仅具有正边权重

时间:2013-12-27 20:21:43

标签: algorithm graph computer-science

我正在寻找关于哪里可以开始寻找这个问题的解决方案的指示。

谷歌搜索了一段时间后,我发现的唯一问题是我的问题是minimum spanning tree。不同之处在于我不是在寻找跨越图中所有顶点的树,而是跨越3个给定顶点的树。

我不是在寻找一个完整的程序,而是在答案的大致方向上指示。

我的另一个想法是使用Dijkstra's algorithm运行3次搜索。我们的想法是通过组合不同的最短路径以某种方式找到最佳路径。我不知道如何做到这一点。

以下是我所说的图表类型的图形示例:

enter image description here

因此,任务是找到一种方法来找到连接任何3个椎体的最小总重量。

编辑:
我通过Dijkstra的algorithem运行3次搜索解决了这个问题。然后我通过添加所有uniqe边缘找到了连接3个顶点的最小总和权重的顶点。感谢所有的帮助:)

4 个答案:

答案 0 :(得分:0)

我很确定你可以用Dijkstra算法做到这一点,唯一的技巧是你不知道访问节点的顺序是什么,所以你必须尝试所有6个排序。

因此,如果您有节点A,B和C,对于第一个排序A,B,C,您将在A和B之间,B和C之间以及C和A之间运行Dijkstra。然后你'做下一个订单A,C,B。继续从那里开始。

答案 1 :(得分:0)

算法1

我认为您使用Dijkstra的想法很好。

你可以通过尝试每个顶点x作为起点来计算和的最小值w(x,a)+ w(x,b)+ w(x,c)其中a,b,c是你想要连接的3个顶点,w(u,v)是用Dijkstra计算的最短路径。

我相信这个最小的和将是连接3个顶点的最小总和。

不幸的是,这意味着运行Djikstra 3.n次。

算法2

更好的方法是从每个要连接的节点运行Djikstra,并将距离存储到图中的每个节点。 (所以wa(x)是从x到a等的最短距离。)

然后您可以像以前一样迭代每个顶点x并计算和的最小值wa(x)+ wb(x)+ wc(x)

这相当于算法1,但由于Dijkstra仅运行3次,因此速度提高了n倍。

答案 2 :(得分:0)

由于权重都是正数且图表是无向的限制,您可以使用Dijkstra算法解决问题,如建议的那样,让我们​​说有问题的节点是ABC,全部在图G中。

  • G开始运行Dijkstra:
    • A -> B
    • B -> C
    • C -> A
  • 这些形成连接三个顶点的三角形的边缘。

    我们可以这样做,因为图表是无向的,这意味着A -> B的最短路径与B -> A的最短路径相同。

  • 由于权重均为正数,因此连接ABC的最短路径将恰好包含两条边。 (假设你很高兴忽略了“三角形”中三条0重量路径引起的循环的可能替代解决方案)。
  • 那么我们如何选择哪两条边?任何两条边都将连接所有三个顶点,因此我们可以消除三个中的任何一个,因此我们将消除最长的一个。

因此,该算法将以与Dijkstra算法相同的时间复杂度进行。

答案 3 :(得分:0)