Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 进程分配算法_Algorithm_Data Structures_Greedy - Fatal编程技术网

Algorithm 进程分配算法

Algorithm 进程分配算法,algorithm,data-structures,greedy,Algorithm,Data Structures,Greedy,我读了一些关于算法的材料,遇到了一个问题 我们有n个进程,每个进程都有一个预定的开始和结束时间。我们希望使用最少数量的处理器来运行所有这些进程 考虑以下算法: 在步骤i中,选择不重叠的当前未分配进程的最大数量,并将它们分配给处理器i 当没有进程保持未分配状态时,此算法完成。最大i是该算法的输出。n的最小值是多少,使得该算法不会产生最佳答案 简单回答:n=5。不过,我不知道这个答案是如何得出的。你能解释一下吗?这里有一个贪婪算法。贪婪算法在每一步都尽其所能,希望这能给出一个总体最优解。它通常会给出

我读了一些关于算法的材料,遇到了一个问题

我们有n个进程,每个进程都有一个预定的开始和结束时间。我们希望使用最少数量的处理器来运行所有这些进程

考虑以下算法:

在步骤i中,选择不重叠的当前未分配进程的最大数量,并将它们分配给处理器i

当没有进程保持未分配状态时,此算法完成。最大i是该算法的输出。n的最小值是多少,使得该算法不会产生最佳答案

简单回答:n=5。不过,我不知道这个答案是如何得出的。你能解释一下吗?

这里有一个贪婪算法。贪婪算法在每一步都尽其所能,希望这能给出一个总体最优解。它通常会给出一个快速算法,有时,但并不总是,会得到一个最优解

您的算法是贪婪算法的一个很好的例子,它有时提供最佳解决方案,有时不提供。它的优点是,它运行速度快,能给出最佳解的近似值;这有时比给出最优解的非常慢的算法要好

你的问题有一个重要的含糊不清之处。您说在步骤i中,您应该选择处理器i上可以调度的剩余进程的最大数量。让我们假设目前可以调度的最大进程数为2。如果有很多方法可以选择2个不重叠的流程,该怎么办?我们如何决定哪两个过程

我会小心地解决这个模棱两可的问题,把它放在一边。假设该算法将不确定地选择一组最大的进程来调度当前处理器。这意味着我们可以将您的问题转化为两个不同的问题:

  • 这个算法可能是次优的最小n是多少?也就是说,让我们假设该算法在选择最大集时是不幸的。事情会多快出差错
  • 该算法保证次优的最小n是多少?也就是说,假设该算法总是幸运的,如果有一个最大集,则选择正确的最大集。那么,事情会以多快的速度出错
  • 你的陈述n=4告诉我你把它解释为第一个问题。我认为第二个问题的答案是n=7,尽管我不确定。这是一个非常有趣的问题,我想我会问一个关于这个问题的后续问题

    如果我们运气不好,在n=4的情况下,我们可以看到事情可能会出错。让我们用时间单位来谈。在这个例子中,我们将说有四个时间单位(一天四个小时,如果你愿意的话,每个过程需要一整小时,从一小时开始到结束)。假设我们需要运行四个进程:

    • [1]
      (即,该过程仅取第一个时间单位)
    • [2,3,4]
      (即过程需要时间单位2到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个不重叠的流程,该怎么办?我们如何决定哪两个过程

    我要解决这个问题