如何找到最小重量的k长度路径?

时间:2014-12-26 08:50:53

标签: algorithm

给定V顶点:V1,V2,V3 ....,V300。对于小于j的所有i,存在从Vi到Vj的边缘,并且给予每个这样的边缘的权重。我们必须从V1开始找到k长度路径(即,精确访问k个顶点)并且可以在任何其他顶点处结束,使得权重最小。

我用dp尝试过Bruteforce,这给了我很慢的O(2 ^ n)。

1 个答案:

答案 0 :(得分:3)

您可以使用图表是非循环的这一事实来获得O(n ^ 3)时间复杂度的动态编程解决方案。

我们假设f(v, length)是以v顶点结尾并且包含正好length个顶点的路径的最小权重。最初,f(v, 1) = 0适用于所有v(因为只有一个顶点的路径具有权重0)。然后,您可以迭代从1n的所有顶点来计算f值:

for i = 1 ... n
    for j = 1 ... i - 1
        for length = 1 ... k
            f(i, length + 1) = min(f(i, length + 1), f(j, length) + dist(j, i))

对于所有min(f(v, k)),答案为v