【问题标题】:Calculate sub-paths between two vertices from minimum spanning trees从最小生成树计算两个顶点之间的子路径
【发布时间】:2014-03-21 02:04:27
【问题描述】:

我有一个来自给定图表的最小生成树 (MST)。我正在尝试为任何两个顶点计算唯一的子路径(它应该是 MST 的一部分,而不是图形),但我很难找到一种有效的方法。

到目前为止,我已经使用Kruskal的算法(使用不相交数据结构)来计算MST(例如:10个顶点A到J)..但是现在我想计算C到E之间的子路径..或者J 到 C(假设图是无向的)。

任何建议将不胜感激。

【问题讨论】:

  • 进行深度优先搜索?您希望多久执行一次此操作?你有多少个节点/边?
  • 现在我有一个包含 5 个顶点的简单图,并且很少有边可以到达它们。但总的来说,我希望有超过 100 个顶点,并且每个节点至少有 10 条边
  • 只需使用“蛮力”方法在 MST 中进行 DFS 即可
  • hmm 所以对于 C 到 E 之间的子路径。我可以从 C 启动 DFS 并在我最终到达 E 时中断 DFS
  • 是的,深度优先或广度优先

标签: algorithm minimum-spanning-tree kruskals-algorithm


【解决方案1】:

如果您只需要其中一个路径,则在树上执行 DFS 可能是最简单的解决方案,具体取决于您存储树的方式。如果它是一个正确的图,那么做 DFS 很容易,但是,如果您只存储父指针,则可能更容易找到两个节点的最小共同祖先。

为此,您可以从两个节点 u,v 走到根 r,然后比较 r->u 和 r->v 路径。它们不同的第一个节点是最不共同的祖先。

通过线性预处理,您可以在恒定时间内回答最不常见的祖先查询。如果您想经常查找节点对之间的路径,您可能需要考虑实现该数据结构。 This paper 解释得很好,我认为。

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 2016-03-26
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多