假设我们有一个已知的最小生成树。
我们的任务是找到每对顶点之间存在的路径的最大边缘。
举个例子,
我们有以下最小生成树:
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),看起来不太好。
答案 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),渐近最优。