贪心算法——作业调度问题

贪心算法:

 

•贪心算法是一种改进的分级处理方法

 

•它是根据题意,选取一种量度标准;然后按这个量度标准对这n个输入进行排序

 

•按序每次输入一个量,如果这个量和当前已构成的最优解S合并可以产生一个可行解,则将这个输入值加入S,否则就抛弃
 
抽象表示:

 

procedure GREEDY(A, n)

    //A(0:n-1) n个已按某种标准排序

    S <- Ø;  //S为最优解,初始化为空

    for i <- 0 to n-1 do

      x <- A[i];

      if FEASIBLE(S, x)

        then S <- UNION(S, x)

      endif

   repeat

     return S

end GREEDY

作业调度问题:

问题描述:


i

1

2

3

4

5

d

2

1

3

3

1

p

20

30

40

50

20

 

•每个作业所需完成时间都是单位时间1

 

•i为作业编号,di为对应作业截止时间,pi为作业可带来的效益值

 

•这些作业的进行都需要使用同一台机器

 

•问:如何安排可以得到最优解(即得到的效益值最大)?

 

解答:

 

•先将所有的工作按照效益值进行排序

 

i

4

3

2

1

5

d

3

3

1

2

1

p

50

40

30

20

20

 

•按照贪心算法来选择,出现一个问题

 

   if FEASIBLE(S, x)

 

      then S <- UNION(S, x)

 

      endif

  就是如何快速的判断新加入的元素是否满足我们的条件 FEASIBLE(S, x)

 

•此时我们再次运用一下贪心算法,对于还未分配处理时间的作业,尽可能推迟对该作业的处理
  以下为运算过程:

1

2

3

4

5

   

i4

   
 

i3

i4

   

i2

i3

i4

   

i2

i3

i4

   

i2

i3

i4

   

 

posted on 2012-03-19 09:35  aho  阅读(3129)  评论(0编辑  收藏  举报

导航