【问题标题】:Algorithm for finding all critical paths寻找所有关键路径的算法
【发布时间】:2010-12-18 14:13:18
【问题描述】:

我需要创建一个可以在图中找到所有关键路径的算法。

我已经找到了节点的拓扑顺序,计算了每个节点的最早结束时间和最晚开始时间。

我还找到了所有关键节点(即位于关键路径上的节点)。

问题在于将它们放在一起并实际打印出所有这些路径。如果图中只有 1 个关键路径,那么我可以处理它,但如果有多个路径,问题就开始了。

例如,一个节点是多个关键路径的一部分、多个起始节点、多个结束节点等等。我还没有想出一个可以将所有这些因素都考虑在内的算法。

我正在寻找的输出是这样的(如果 a、b、c 等都是节点):

  • a->e
  • a->c->f->i->j->k
  • a->c->g
  • l->e

如果有人可以编写一个算法描述,该算法可以从知道关键节点、拓扑顺序等中找到路径,那就太好了。或者也可以用 C 或 java 代码。

编辑: 这是一个示例,它应该提供我之前发布的输出。关键路径为红色,每个节点的值都标在其上方或附近。

【问题讨论】:

  • 你能提供一个完整的例子吗?带有预期结果和关键节点/路径的清晰定义的示例图?
  • 好的,我为我的输出添加了示例图。

标签: algorithm graph


【解决方案1】:

最近开始时间的计算也几乎提供了关键路径。您需要从终端节点构造结果,然后倒退:

  1. 找出所有最早结束时间最长的节点 (t=11, nodes = {e,g,k})
  2. 对于它们中的每一个,找到所有具有本地最大最早结束时间的前驱。 对于 e,l 和 k 都有 t=2,所以你得到 l->e,a->e。对于g,t=6,对于节点c, 所以你得到c->g。对于 k,t=10,但只有 j 将其作为结束时间,所以你得到 j->k。
  3. 重复直到到达起始节点。 l->e 和 a->e 已经是起始节点。 c->g 有唯一的前身 a,所以你得到 a->c->g。 j->k 有 t=9,这是 i 的结束时间, 所以你得到 i->j->k。

【讨论】:

    【解决方案2】:

    我不完全理解你的问题:什么是关键路径?您可能会得到以下帮助: 计算 Minimum Spanning TreeDijkstra's shortest path algorithm 的算法 - 尽管您可能已经知道这些算法。

    【讨论】:

    • “在项目管理中,关键路径是项目网络活动的顺序,它们加起来总持续时间最长。”您可以阅读更多来自en.wikipedia.org/wiki/Critical_path_method
    • 感谢您的回答。现在你提到它,我依稀记得有人教我或解释过这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多