想象一下,我有一个有顶点和边的有向无环图(DAG)。
顶点可以是以下两种类型之一:
边表示依赖关系。它始终源自一些计算任务顶点T并以某些资源顶点R结束。
图结构的限制:
语义:
题:
鉴于上面的图表,我可以使用什么算法来计算我可以并行运行的所有可能任务,以便它们不会相互阻塞?即在任何给定时间,我希望能够实现最大的并行化。我将使用该算法来发现所有不会相互阻塞的任务,并运行它们。每当任务完成时,我都想重新评估图形以查看是否可以分离出更多未被阻止的任务。
我想知道我可以用于这种计算的算法。这听起来像一个硬图问题,但我怀疑这种问题并不完全是全新的......
例:
在提供的示例中,我可以先运行T1和T3。完成后,我可以运行T2和T4。
将资源集表示为S,并将每个任务表示为S的子集,您的问题是maximum set packing。另见here。