最佳任务顺序

时间:2017-10-24 10:55:54

标签: algorithm graph

您有n个任务,执行时间取决于之前完成的任务。如果某些任务尚未完成,则任务的执行时间可能会缩短。创建能够在最短的时间内找到最佳任务顺序的算法。

E.g。

n = 3的

任务A,B,C

T(A | B,C)=执行任务的时间A给定B,C早先完成

T(A |)=执行任务A的时间作为第一个任务

T(A |)= 50

T(A | B)= 40

T(A | C)= 40

T(A | B,C)= 30

T(B |)= 30

T(B | A)= 25

T(B | C)= 20

T(B | A,C)= 15

T(C |)= 20

T(C | A)= 15

T(C | B)= 10

T(C | A,B)= 10

任何提示? 我在考虑Dijkstra算法,但在这种情况下似乎没有工作。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

让我们使用已知起始顶点A的最小Hamiltonian path problem并为此任务顺序问题创建输入数据。

T(A|) = 0
T(i|) = inf, for any i ≠ A
T(i|j) = edge_weight(i, j), for any i,j 

如果我们能够解决这个任务顺序问题,我们就可以解决NP-hard的最小哈密顿路径问题。因此,没有已知的算法在多项式时间内解决该问题。

现在让我们为相对较小的n解决这个问题。在任务执行的每一步中,我们都有一组已经完成的任务S(它在开头是空的)。然后我们可以执行下一个任务,选择数据中的最佳可用时间,将其添加到集合S并转到下一步。这自然带来了状态S的动态编程方法 - 一组已经完成的任务(这可以用位掩码实现): enter image description here
其中minTime(S, i)是任务i的最小执行时间,此时集S中的所有任务都已执行。