Algorithm 同时考虑顶点和边代价的最短路径算法

Algorithm 同时考虑顶点和边代价的最短路径算法,algorithm,graph,Algorithm,Graph,这是一个一般的算法问题。我想在一个无向图上运行一些最短路径算法,其中边和顶点都有相关的代价。大多数最短路径搜索算法都没有考虑顶点代价。有什么方法可以补偿这个问题吗?通过将边连接的两个顶点的成本的一半添加到边的成本(称为边的增强成本)来增加图形 然后忽略顶点代价,在增广图上运行普通的最短路径算法 对于每条路径 v_0 -e_1-> v_1 -e_2-> v_2 -e_2-> ... -e_n-> v_n 增广图中的代价为 (1/2*C(v_0) + C(e_1) + 1/

这是一个一般的算法问题。我想在一个无向图上运行一些最短路径算法,其中边和顶点都有相关的代价。大多数最短路径搜索算法都没有考虑顶点代价。有什么方法可以补偿这个问题吗?

通过将边连接的两个顶点的成本的一半添加到边的成本(称为边的增强成本)来增加图形

然后忽略顶点代价,在增广图上运行普通的最短路径算法

对于每条路径

v_0 -e_1-> v_1 -e_2-> v_2 -e_2-> ... -e_n-> v_n
增广图中的代价为

(1/2*C(v_0) + C(e_1) + 1/2*C(v_1)) + (1/2*C(v_1) + C(e_2) + 1/2*C(v_2)) + ... + (1/2*C(v_(n-1)) + C(e_n) + 1/2*C(v_n))
= C(v_0) + C(e_1) + C(v_1) + C(e_2) + ... + C(e_n) + C(v_n) - 1/2*(C(v_0 + C(v_n))
因此,增广图中两个顶点
a
b
之间的路径成本是原始图中相同路径的成本减去起点和终点的组合成本的一半


因此,当且仅当路径在扩充图中是最短路径时,路径在原始图中是最短路径。

对于每条边,将相应顶点的成本的一半添加到边成本中,然后忽略顶点成本。这不会夸大顶点的成本吗?如果一个顶点有4个与之相连的边,那么顶点的代价将增加2倍。看看Primm的算法。在S.SkieNA的算法设计手册中提到,如果我们给出一个在顶点上而不是在边上的权值的图,那么我们可以把有向边(i,j)的代价看作顶点J的代价。然后,通过运行Dijkstra的算法来解决这个问题,我们可以在这个问题上遵循同样的方法吗?我不太清楚为什么我们应该增加每个顶点的一半成本。@antonis_wrx这里我们有一个无向图,所以你不知道边在解决方案中可以沿哪个方向移动,因此你不知道要将哪个顶点的成本添加到边成本中。如果它是一个有向图,也可以将每条边的结束顶点的代价添加到边的代价中。为什么只将顶点代价之和的一半添加到边上?@1110101001,因为路径上的每个顶点,除了起始顶点和结束顶点,都会被考虑两次,一次是在该顶点结束的边上,对于从该顶点开始的边,一次,因此边的增加成本之和只计算一次所用顶点的原始成本(或者,如果路径有循环,则与访问顶点的频率相同),但起点和终点顶点除外,它们仅计为一半。但是,由于路径无关,所以路径的相对成本保持不变,我们可以考虑处理超图结构的一般方法吗?这是一个每个边都是超边的图?