贪心算法——任务安排

给定一台有m个储存空间的单进程机器;

现有n个 请求:第i个请求计算时需要占用R[i]个空间,计算完成后,储存计算结果需要占用O[i]个空间(其中O[i]<R[i])。问如何安排

这n个请求的顺序,使得所有请求都能完成。

如:m=14,n=2,R[1,2]=[10,8],O[1,2]=[5,6]。可以先运行第一个任务,计算时占用10个空间,计算完成后占用5个空间,剩余9个空间执行第二个任务;但如果先运行第 二个任务,则计算完成后仅剩余8个空间,第一个任务的 计算空间就不够了。

 

从题意,我们可以分析出,第k个元素的运算空间 + 前k个元素的所用储存空间越小越好

我们考察两种情况,

O1 + O2 + O3…. +Oj  … + Ok-1 + Rk (1)

O1 + O2 + O3…. +Ok … + OR-1 + Rj  (2)

假设(1)是小的那个。 那么一定有Oj + Rk <= Ok + Rj。 从而 Rk – Ok <= Rj – Oj 

得出结论,Rj – Oj大,所以j任务要先于k任务被处理。

因此,所有任务根据相应的 R – O 降序排序,就是任务处理的先后顺序

 

总结套路:题目比较简单,但总结也是有点东西的 。我们想知道全局的任务最佳排序方案,先定位到两个任务,看这两个任务先后顺序怎么拍更有利于全局,再把这种规则推广至全局。

    原文作者:算法
    原文地址: https://www.twblogs.net/a/5bd3c0762b717778ac20cad7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞