在有向图中找到节点的最佳时间表

时间:2015-10-13 15:14:48

标签: graph directed-acyclic-graphs

所以我有一个表示项目的DAG,每个节点都是一个任务,它有一个变量,表示完成该任务需要多长时间。

我们可以假设可以同时处理任意数量的任务。 如何找到最佳的任务计划,以便找到一系列可以最早完成项目的任务。

1 个答案:

答案 0 :(得分:1)

如果您可以并行处理任意数量的任务,则可以轻松计算出最佳计划。可以递归地将最佳调度中的任务的开始时间定义为图中所有其前任节点的最佳结束时间(即,最佳开始时间加持续时间)的最大值。没有前任的任务都是在时间0开始(或者在你希望它们开始的任何时间开始)。

可以通过以拓扑顺序迭代任务来迭代地计算此递归。在伪代码中,算法可能如下所示:

// Computes optimal starttime for tasks in the dag.
// Input:  dag      : DAG with tasks as nodes
//         duration : Array with duration of tasks
// Output: Array with optimal starttime of tasks
def computeSchedule(dag, duration)
    starttime := [0 for each node in dag]
    for t in nodesInTopologicalOrder(dag):
        starttime[t] = max(starttime[p] + duration[p] for p in predecessors(t))
    return starttime