图表调度交集

时间:2017-05-18 16:16:58

标签: algorithm graph scheduling

我需要计算工作流中所有可能的交叉点(有向无环图)。我试图找到有效的算法,但缺乏发现。看起来像是并行调度理论。

例如我有图表:

enter image description here

我不知道每个节点的执行时间,所以我需要找到所有的交叉点:

  1. A
  2. B C
  3. B E F
  4. B E G
  5. B G
  6. B H
  7. D C
  8. D E F
  9. D E G
  10. D G
  11. D H
  12. ħ
  13. 和其他可能的集合(评论后更新)
  14. 我如何计算这个交叉点?

1 个答案:

答案 0 :(得分:1)

为了回答部分问题,对于问题中的问题,没有有效的算法(在运算符边界的意义上,在输入的编码长度中是多项式限制的),通过以下类示例。 / p>

n为非负整数。使用G=(V,E)节点创建任务图n+2,如下所示。设s为源节点,构成第一层,让t_1,...,t_n为第二层的n个中间节点,让t为第三层的终端节点,即

V := { s } union { t_i : i in { 1,...,n } } union { t }

并将第一层连接到第二层,将第二层连接到第三层,即

E := { ( s, t_i ) : i in { 1,...,n } } union { ( t_i, t ) : { 1,...,n } }

直观地表示源连接到所有任务,所有任务都连接到终端。假设每个t_{i}的所有任务i in {1,...,n}都有处理时间12; st的处理时间并不重要。这意味着可能每个t_{i}的每个任务组合i in {1,...,n}可以同时运行;但是,所有任务组合t_i{t_1,...,t_n}的{​​{3}})的基数都是2^nn不是多项式约束的#!/usr/bin/env amm import sys.process._ import java.io.File import ammonite.ops._, ImplicitWd._ @main def ini(args: String*) = { val server = args.headOption.getOrElse("devserver") val path = /'Users/'Foo/'IdeaProjects/'my-project val process = Process(Seq("sbt", "clean"), path) process.! }

话虽这么说,也许通常的“多项式运行时绑定”的概念是'这里不适用,因为输出的大小不是多边形的输入大小。