如何将一组依赖步骤拆分为组

时间:2015-06-24 14:13:39

标签: algorithm graph-theory

我有一系列要执行的步骤,每个步骤都有一个时间(以分钟为单位)。

我也有一组依赖关系(即步骤7必须在步骤5之后)。

假设没有循环,那么将它们分组成组的正确算法是什么,其中每个组的总时间少于一定数量。

显然,除非依赖关系给出线性顺序,否则有各种方法来安排步骤,是否容易/可能计算出最优(即,需要最少的组)。

目前我的步骤和依赖项都在SQL中,但我很高兴有另一种语言的解决方案。

1 个答案:

答案 0 :(得分:4)

当没有依赖关系时,这就是NP-hard bin打包问题。 Bin打包有一些巧妙的精确算法,但我不确定如何调整它们,并且它们仍然很难实现。这里是相当不错的First Fit Decreasing近似值的模拟(原始的11/9渐近逼近比率;不知道新版本是否有用)。

首先从数据库中转储所有任务及其依赖项。在拓扑上使用Kahn's algorithm的变体对任务进行排序,其中,在所有先前已选择依赖项的任务中,选择下一个最长的任务。在第一个组中安排此任务,在该组中它既适合也不在依赖之前。