贪心算法用于调度?

时间:2016-04-23 06:38:57

标签: algorithm computer-science greedy

在给出问题的运行时间(如5分钟,10分钟,不是开始和结束时间)时,贪婪解决方案的问题是什么,并且你有运行它们的过程然后最小的最小时间是什么?
假设我有九个工作(3,5,6,10,11,14,15,18,20分钟)和三个流程然后解决方案

第一个流程句柄 - > 20 + 14

第二个流程句柄 - > 18 + 11 +5

第3个流程句柄 - > 15 + 10 + 6 + 3

最短时间为34分钟

2 个答案:

答案 0 :(得分:0)

鉴于问题是NP难(see for example here),在所有情况下都不可能存在能给出精确解的多项式时间算法。

答案 1 :(得分:0)

首先,请参阅维基百科页面:https://en.wikipedia.org/wiki/Greedy_algorithm

从文章的第一部分开始:

  

贪婪算法是一种算法,它遵循问题求解启发式,在每个阶段进行局部最优选择,希望找到全局最优。在许多问题中,贪婪策略通常不会产生最佳解决方案......

这里有两点需要强调:

  1. 贪婪算法不一定能找到最佳解决方案。

  2. 对于单一问题,通常会有许多不同的贪婪方法。

  3. 以您的问题为例,这两种方法都很贪婪:

    贪婪方法#1 :当每个流程都可用时,将最长的任务分配给流程。这可能会产生以下结果:

      

    过程1:20 + 10 + 3 = 33

         

    过程2:18 + 11 + 6 = 35

         

    过程3:15 + 14 + 5 = 34

         

    总时间:35

    贪婪方法#2 :当每个流程都可用时,将最短任务分配给流程。这将得到以下结果:

      

    过程1:3 + 10 + 15 = 28

         

    过程2:5 + 11 + 18 = 34

         

    过程3:6 + 14 + 20 = 40

         

    总时间:40

    这两种方法都是贪婪的算法。这里的一个重要假设是问题只是处理所有任务。如果问题是在尽可能短的时间内处理所有任务,那么(正如评论中已经说明的那样)没有贪婪的算法可以解决这个问题。