Algorithm 进程分配算法
我读了一些关于算法的材料,遇到了一个问题 我们有n个进程,每个进程都有一个预定的开始和结束时间。我们希望使用最少数量的处理器来运行所有这些进程 考虑以下算法: 在步骤i中,选择不重叠的当前未分配进程的最大数量,并将它们分配给处理器i 当没有进程保持未分配状态时,此算法完成。最大i是该算法的输出。n的最小值是多少,使得该算法不会产生最佳答案 简单回答:n=5。不过,我不知道这个答案是如何得出的。你能解释一下吗?这里有一个贪婪算法。贪婪算法在每一步都尽其所能,希望这能给出一个总体最优解。它通常会给出一个快速算法,有时,但并不总是,会得到一个最优解 您的算法是贪婪算法的一个很好的例子,它有时提供最佳解决方案,有时不提供。它的优点是,它运行速度快,能给出最佳解的近似值;这有时比给出最优解的非常慢的算法要好 你的问题有一个重要的含糊不清之处。您说在步骤i中,您应该选择处理器i上可以调度的剩余进程的最大数量。让我们假设目前可以调度的最大进程数为2。如果有很多方法可以选择2个不重叠的流程,该怎么办?我们如何决定哪两个过程 我会小心地解决这个模棱两可的问题,把它放在一边。假设该算法将不确定地选择一组最大的进程来调度当前处理器。这意味着我们可以将您的问题转化为两个不同的问题:Algorithm 进程分配算法,algorithm,data-structures,greedy,Algorithm,Data Structures,Greedy,我读了一些关于算法的材料,遇到了一个问题 我们有n个进程,每个进程都有一个预定的开始和结束时间。我们希望使用最少数量的处理器来运行所有这些进程 考虑以下算法: 在步骤i中,选择不重叠的当前未分配进程的最大数量,并将它们分配给处理器i 当没有进程保持未分配状态时,此算法完成。最大i是该算法的输出。n的最小值是多少,使得该算法不会产生最佳答案 简单回答:n=5。不过,我不知道这个答案是如何得出的。你能解释一下吗?这里有一个贪婪算法。贪婪算法在每一步都尽其所能,希望这能给出一个总体最优解。它通常会给出
(即,该过程仅取第一个时间单位)[1]
(即过程需要时间单位2到4)[2,3,4]
(等)[1,2,3]
[4]
[1]
和[2,3,4]
;在第二个处理器上,我们运行[1,2,3]
和[4]
。我们的贪婪算法可能会找到这个解,并给我们一些最优的结果。但它可能会安排[1]
和[4]
在第一个处理器上运行,因为这也是一个最大集合(它将两个进程放在第一个处理器上)。如果它这样做了,那么剩下的是[1,2,3]
和[2,3,4]
,它们不能一起运行,因此它将使用三个处理器
如果n=4,它可能会出错。n=3会出问题吗?我不这么认为。最佳解决方案有三种可能:它只需要1个处理器,或2个处理器,或3个处理器。如果最优解决方案只需要1个处理器,那么这意味着所有三个进程都可以在第一步进行调度,我们的贪婪算法将找到这个解决方案。如果需要3个处理器,则不能同时调度两个进程,因此贪婪算法将一次调度一个进程,并再次找到最优(3个处理器)解决方案。如果它需要两个处理器,那么必须是两个进程可以一起运行。如果这是正确的,那么贪婪算法将在第一步选择两个进程。无论选择哪两个,只剩下一个,这将安排在第二步。因此贪婪算法需要2个处理器,这也是最优的
正如我所说,我认为乐观的情况更有趣:这个算法保证次优的最小n是多少?我会问一个关于这个的后续问题,并链接到这个
这是一个贪婪的算法。贪婪算法在每一步都尽其所能,希望这能给出一个总体最优解。它通常会给出一个快速算法,有时,但并不总是,会得到一个最优解 您的算法是贪婪算法的一个很好的例子,它有时提供最佳解决方案,有时不提供。它的优点是,它运行速度快,能给出最佳解的近似值;这有时比给出最优解的非常慢的算法要好 你的问题有一个重要的含糊不清之处。您说在步骤i中,您应该选择处理器i上可以调度的剩余进程的最大数量。让我们假设目前可以调度的最大进程数为2。如果有很多方法可以选择2个不重叠的流程,该怎么办?我们如何决定哪两个过程 我要解决这个问题