1

所以,我有一个问题。假设有 k 个处理器和 k*n 个作业。现在,每个处理器应该恰好完成 n 个工作,并且每个处理器都需要特定的时间来完成一个特定的工作。如下图所示,这里的时间 k 列是指处理器 k 完成不同工作所花费的时间。

不同工作的时间

任务是找到我们可以完成所有工作的最短时间。现在,对于 k=2,我发现贪婪的方法是有效的。我们可以计算每个工作的 T2-T1。如果我们在处理器 2 中执行任务,这是时间的净损失。因此,我们可以按非递减顺序对其进行排序,并将前 n 个作业分配给处理器 2 和其余处理器 1。我无法扩展解决方案对于更高的 k 值。有没有一个通用的算法呢?如果有人可以为此指出任何论文,或者指导我大致的方向,我将不胜感激。我需要一个精确的解决方案,但足够接近的解决方案也可以。

编辑:机器一个接一个地运行,而不是同时运行。因此,完成时间不是所有机器花费的最短时间,而是它们时间的总和。 例子

4

1 回答 1

1

首先,对于k = 2一个简单的贪婪方法是行不通的。要看到这一点,只需考虑两个处理器中作业成本相同的特殊情况。这种特殊情况是众所周知的 NP 完全的分区问题。如果2 < k这变成了多路号码分区

您描述的问题称为Unrelated-machines scheduling。标准多项式时间近似来自用于调度不相关并行机器的近似算法,该算法给出的结果与最优值相差不超过 2 倍。

于 2022-02-10T18:53:38.687 回答