当前位置: 首页 > 知识库问答 >
问题:

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

朱宇航
2023-03-14

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

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

举个例子,

我们有以下最小生成树:

    1---10---2
       \     
       5\   
           \ 
    4---4---3

在顶点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。

所以最终的答案是:

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

哪个算法最适合这个任务?

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

共有1个答案

孔礼骞
2023-03-14

对于每个顶点,可以执行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),渐近最优。

 类似资料:
  • 给定一些无向边加权图,什么算法可以用来找到从某个顶点v到另一个顶点w的最短路径? 对于有向边加权图,可以使用Dijkstra的最短路径算法,但我使用的是无向图,所以它不起作用。 对于非边加权的图,可以使用广度优先搜索(BFS),但我使用的是边加权图,所以它不起作用。 既然它是无向和边加权的,一般最短路径法是什么?

  • 我试图通过在MST中添加新顶点来更新MST。为此,我一直在关注Chin和Houck的“更新生成树”。http://www.computingscience.nl/docs/vakken/al/WerkC/UpdatingSpanningTrees.pdf 论文中的一个步骤要求我在两个给定顶点之间的路径中找到最大的边。我的想法是找到顶点之间所有可能的路径,然后从这些路径中找到最大的边。我一直在尝试在

  • 下面的堆栈溢出问题 我尝试了在语句中使用两个重复的多个构造,但无法为每个起始顶点获得独立的。我也在使用平台,因此它限制了Gremlin的使用,其中不允许使用循环/脚本。所有gremlin查询必须以并由与链接在一起的命令组成 https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.ht

  • 我有一个由最小生成树表示的边加权无向图。每个垂直由一个整数表示。MST如下所示: 我想知道,如何使用这个MST来找到从顶点x到顶点y的最短路径?假设我想找到从0到3的最短路径。很容易看到路径是0-2,2-3,总权重为0.26 0.17=0.43。但是我应该如何构造一个通用的方法来实现这一点?在伪码中

  • 因此,如果我在一个图中有两个顶点,它们通过一个以上的边连接,而它们之间有相同的最短路径(即,如果我有节点a和节点B,它们直接通过三条边连接(它们之间有三条最短路径,每个距离为1),所以计数应该返回3)我该如何修改BFS算法来实现这一点?这是我的代码,它只计算2个节点之间的最短路径,而不计算这些最短路径的个数。

  • 这里有一个非常简单的查询: 它的JSON输出是 现在,客户顶点还包含属性名称和年龄。我想了解的是,如何(简单地说,如果可能的话)形成我的小精灵查询,使其在图中嵌套顶点属性。注意,当我刚刚运行g.V(“customerId”)时,响应确实包含这些属性。