在图 G 中找到最大权重边?

Posted

技术标签:

【中文标题】在图 G 中找到最大权重边?【英文标题】:Find the maximum weight edge in a graph G? 【发布时间】:2019-10-11 19:25:43 【问题描述】:

我的任务是,给定图 G 中与 E 条道路相连的 V 个村庄,每条道路都标有一个正数。你必须至少达到这个数字的水平才能进入这条道路。换句话说,如果一条道路标为 5,那么您的等级必须至少为 5 或更高才能进入这条道路。现在我的任务要求设计算法,找到能够从任何其他村庄到达 V 中任何村庄所需的最低许可级别。所以,我的解释是我们可以在图中找到最大权重边。但我还没有弄清楚哪种算法适合这种情况。

【问题讨论】:

@mangusta 如果图有顶点 A、B、C 和边 (AB,1)、(BC,1) 和 (AC,1.5),则级别 1 可以使用边传播到任何地方(AB) 和 (BC),但从 A 到 C 的最短路径的最大权重为 1.5。 @conditionalMethod,感谢您指出这一点!你是对的 您可以将边从最小权重排序到最大。从图的一组顶点开始,没有边。开始按先前的顺序将边添加到图形中。在图形未连接或边用完时继续添加边。添加的最后一条边的权重为您提供解决方案。 用于测试连通性:当您添加第一个边标记时,它连接的两个顶点。添加新边时,标记可以使用新边到达的任何新顶点。只要有没有标记的顶点,图仍然是不连通的。 这基本上就是 Kruskal 的最小生成树算法的工作方式)简单来说我们需要选择最小生成树的最大边 【参考方案1】:

这个可以在O(E)解决。

为什么你的解决方案是错误的?考虑一个三角形,其中两条边为 1,最后一条为 2,所需的最低间隙为 1,您的解决方案为 2。

我能想到的解决方案是创建Minimum bottleneck spanning tree (MBST),而不是利用它的最大优势,这将是您的许可级别。

为什么它会起作用?嗯,这棵树的最大边是你能得到的最小的(最小瓶颈),并且仍然可以到达图中的任何地方(跨越)。

MBST 可以是 created in O(E) 使用分而治之的方法,而不是遍历该树中的所有边以找到最大值为 O(E)。共O(E)

您可以使用简单的MST 来解决它,因为任何MST 都是MBST(proof in q3),但这需要O(E log V)O(E + V log V),具体取决于算法(Kruskal 或Prim)。

【讨论】:

感谢您的回复,但为什么要提到使用 MBST 而不是 MST(因为每个 MST 都必须是 MBST),它只是更快?我更喜欢其中一个命令说我们可以使用 Kruskal 算法在图中找到 MST。因为我的讲座刚刚介绍了 Kruskal 算法和分而治之的方法。 @D.dream 是的,它只是更快,问你的教授你需要达到的时间复杂度是多少。当我在大学做 Algo1 时,我们的作业中有这个,这就是我的回答。 @D.dream 我编辑了它,如果您对答案感到满意,我将不胜感激。

以上是关于在图 G 中找到最大权重边?的主要内容,如果未能解决你的问题,请参考以下文章

网络流最大流

连接节点以最大化总边权重

如何使用最大流量算法在图上找到最小割?

图 - 具有顶点权重的最短路径

《算法导论(原书第3版)》第23章部分题目解答

找到最大权重的子图