如何找到mst的所有顶点对的最大路径边

时间:2016-12-29 16:01:48

标签: algorithm graph depth-first-search minimum-spanning-tree

假设我们有一个已知的最小生成树。

我们的任务是找到每对顶点之间存在的路径的最大边缘。

举个例子,

我们有以下最小生成树:

    X 10  5  5
    X  X 10 10
    X  X  X  4
    X  X  X  X

在顶点1和顶点2之间,我们有一个成本为10的边。 在顶点1和顶点3之间,我们有一个成本为5的边。 在顶点3和4之间,我们有一个成本为4的边缘。

每条路径的最大边缘:

路径1-2:它只包含成本为10的边缘。所以答案是10。

路径1-3:它只包含成本为5的边缘。所以答案是5。

路径1-4:要从顶点1到顶点4,路径为1-3-4。它包含成本为5的边缘和成本为4的边缘。所以答案是5。

路径2-3:我们需要按照路径2-1-3进行操作。最大边缘为10。

路径2-4:我们需要按照路径2-1-3-4。最大边缘10。

路径3-4:最大边缘4。

所以最终的答案是:

{{1}}

哪一个是最适合此任务的算法?

到目前为止,我已经考虑过为每对顶点使用DFS的可能性。但是,由于我们有O(V ^ 2)对顶点,因此总复杂度为O(V ^ 3),看起来不太好。

1 个答案:

答案 0 :(得分:1)

对于每个顶点,您可以执行DFS以查找与该顶点对应的行/列的矩阵条目。像

这样的东西
fill-entries-DFS(root, maxEdgeRootToV, v):
    set the entry for (root, v) to maxEdgeRootToV
    for each child w of v:
        fill-entries-DFS(root, max(maxEdgeRootToV, edgeWeight(v, w)), w)

for each vertex v:
    fill-entries-DFS(v, -infinity, v)

运行时间为O(V ^ 2),渐近最优。