图 - 顶点重量最短路径(graph - Shortest path with Vertex Wei

2019-07-29 06:19发布

这里是一个消费:

在某些图形问题,顶点具有可具有的权重,而不是或addi-重刑边缘的权重。 让了Cv是顶点v的成本,和C(X,Y)的边缘(X,Y)的成本。 这个问题涉及到求在图G的顶点A和B之间的最廉价的路径的路径成本的路径上遇到的边和顶点的成本的总和。

(a)假设在图中每条边具有零权重(而非边缘具有∞的成本).Assume该CV = 11≤v≤n所有顶点(即,所有顶点具有相同的费用) 。 举一个高效的算法来找到从A到B的时间复杂度最廉价的路径。

(b)现在假设顶点成本不恒定(但都是正)和边缘成本仍然如上。 举一个高效的算法来找到从A到B的时间复杂度最廉价的路径。

(c)现在假设,无论是边缘和顶点费用是不固定的(但都是积极的)。 举一个高效的算法来找到从A到B的时间复杂度最廉价的路径。


下面是我的回答:

(a)中使用正常BFS;

(二)使用Dijkstra算法,但与顶点权重代替重;

(C)

还可以使用Dijkstra算法

如果只考虑对边的权重,然后Dijkstra算法的重要组成部分,我们有:

if (distance[y] > distance[v]+weight) {
    distance[y] = distance[v]+weight; // weight is between v and y
}

现在,考虑约顶点权重,我们有:

if (distance[y] > distance[v] + weight + vertexWeight[y]) {
   distance[y] = distance[v] + weight + vertexWeight[y]; // weight is between v and y
}

我对吗?

我想我的答案(C)是太简单了,是吗?

Answer 1:

你是在正确的轨道上,并且该解决方案是非常简单的。

在这两种B,C,减少的问题,以正常的Dijkstra,它假定在顶点没有权重。
对于这一点,你需要定义w':E->R对于边缘的新权重函数。

w'(u,v) = w(u,v) + vertex_weight(v)

的(b) w(u,v) = 0 (或const),并将该溶液是鲁棒的,以适应(c)中,以及!

它背后的想法是使用边缘成本你的优势的重量,并达到目标顶点的成本。 源的成本已经支付,让你忽略它1。

减少的,而不是改变的算法的问题,通常更易于使用,证明和分析!


(1)在此解决方案从“错过”源的重量,所以最短路径st将是: dijkstra(s,t,w') + vertex_weight(s)_ [其中dijkstra(s,t,w')是从距离st使用了w'



Answer 2:

顶点权重可以通过在两个顶点a1和a2与来自A1的边缘与的重量对a2切片每一个顶点被移除。

我认为你是正确的Dijkstra算法的调整。



文章来源: graph - Shortest path with Vertex Weight