algorithm - 加权无向图中的总成对成本

标签 algorithm graph graph-theory

考虑我们有一个加权无向图,其中对于任何两个顶点,都有一条连接它们的唯一路径。有 n 个顶点和 n - 1 条边,每条路的成本是 c_i

现在,如果连接两个给定顶点的每条路径都有一定的成本,这取决于它经过的道路,我们如何才能有效地计算所有城市对之间的总成本?

例如,每条路径的代价可以是它经过的第一条路和最后一条路的总和,也可以是它经过的每条路的代价的某次幂之和,也可以是代价的最大值减去它经过的道路成本的最小值:任何取决于道路成本的公式。

要使用什么算法才能有效地解决问题?

最佳答案

对于任何路径 p,让 max(p)min(p) 表示它经过的道路的最大和最小成本经过。 然后 Total_cost = sum for all path p [max(p) - min(p)]

然后所有路径p max(p)的总和可以通过以下方式找到

Let G=(V,E) be the input graph, which should be a tree
Create a graph G' with vertices set V and no edges
Insert every edge in E to G' from lowest cost to hightest cost

每次插入边 e 时,它都会连接两个组件 S,T,您可以看到对于来自的每条路径 p STmax(p) = cost(e) 因此,您可以通过对它们求和来找到所有路径 p max(p) 的 sum。 要有效地连接两个组件,我认为您可以使用 Kruskal 算法的思想。

同样,您可以找到所有路径 p min(p) 的总和,最后是总成本。

关于algorithm - 加权无向图中的总成对成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652332/

相关文章:

java - 随机二分搜索算法

保持更改数组排序顺序的算法

algorithm - 使用四叉树算法的图像压缩

javascript - 如何在javascript中运行php数组的循环(google graph api)

algorithm - 最宽路径问题有哪些应用?

c++ - 广度优先搜索修剪和内存泄漏 C++

algorithm - 在不影响运行时间的情况下维护可汗算法(渐近)

algorithm - 有向图行走 - 至少访问每个节点一次

c++ - 为什么 TopoSort 仅适用于某些图形,而对其他图形无效?

java - Java 中的近似最小反馈弧集实现