具有依赖关系的进程调度算法(线性时间)



我有一点麻烦,试图找出如何创建一个算法,创建一个时间表,以尽量减少最短的时间使用。问题在这里。

考虑一个具有进程1,2,3,4…的程序n。程序必须完成所有的过程才能工作,有些过程可能依赖于另一个过程来完成。(例:进程2依赖于进程1,这意味着我们必须在启动进程2之前完成进程1)

我们被赋予无限数量的机器,以便进程可以并行运行

所有进程需要相同的时间来完成

设计一个算法,在给定所有进程的依赖关系列表作为输入的情况下,用最少的时间运行程序。

谢谢你的帮助!

所以我想让这个算法的方式是把问题想象成一个DAG(有向无环图),然后使用拓扑排序来创建一个顺序来完成任务,但是,我很困惑如何找到最快的解决方案。

例如,我们有:

A不依赖于任何东西
B依赖于A
C依赖于A
D依赖于C
E不依赖于任何东西
F依赖于B, D, E

如果每个进程需要1秒来完成,我们可以使用无限的机器并行处理它们,那么我们可以在4秒内完成程序,对吗?

但是我如何创建一个算法来找出4秒是最小的数字呢?

对不起,如果我没能解释清楚问题,

因为我们有无限数量的机器,只要有可能处理一个任务,分配一台新机器来完成它是最优的。所以我们可以根据这个观察结果做一个贪心算法:

Let ToDo be an empty queue
Let time = 0
For every node u :
If u has no dependency :
Add (u, 1) at the end of the ToDo

While ToDo is not empty :
Let (u, t) be the head of ToDo
Let time = max(time, t)
For all nodes v depending on u :
If u was the only dependency of v :
Add (v, t+1) to the end of ToDo
Remove u from the graph //(Hence no node depend on u anymore)
Return time

最新更新