最小延迟调度问题 Scheduling to Mnimizing Lateness

问题描述:

假定有一单个的资源在一个时刻只能处理一个任务。现给定一组任务,其中的每个任务 i 包含一个持续时间 ti 和截止时间 di 。设计与实现一个算法,从t = 0 时刻开始任务,对这组任务给出一个最优调度方案,使其对所有任务的最大延迟最小化。

Single resource processes one job at a time.

Job i requires ti units of processing time and is due at time di.

If i starts at time si it finishes at time fi = si + ti.

Lateness: li = max{0, fi - di};

Goals: schedule all jobs to minimize lateness L.

例如下图?:

当然,这不是最优调度哦

❗算法描述❗:

在该题中,我们可以想到利用下面的贪心原则进行计算:

① Shortest processing time first 按每个任务的持续时间进行升序排序;

反例:

② Earliest deadline first 按截止时间进行升序排序;

③ Smallest slack 按 dj - tj 的冗余进行升序排序。

反例:

我们考虑用第②种作为贪心原则。老师上课时的证明emmm没太听懂,有两方面 no idle time 和 no inversions.

伪代码:

Sort n jobs by deadline so that d[1] ≤ d[2] ≤ … ≤ d[n]

t = 0

for j = 1 to n

Assign job j to interval [t, t + t[j]]

s[j] = t, f[j] = t + t[j]

t = t + t[j]

output intervals [s[j] , f[j]] for j = 1 to n

代码:

#include #include #include using namespace std;

struct JOB

{

int time;

int deadline;

};

bool comp(JOB &a, JOB &b);

int main()

{

int num;

cout << "请输入工作数:" << endl;

cin >> num;

vectorjobs(num);

cout << "请输入各项工作的持续时间和截止时间:" << endl;

for (int i = 0; i < num; ++i)

{

cin >> jobs[i].time >> jobs[i].deadline;

}

sort(jobs.begin(), jobs.end(), comp);

/*cout << "排序后:" << endl;

for (int i = 0; i < num; ++i)

{

cout << jobs[i].time << ' ' << jobs[i].deadline << endl;

}*/

int start = 0;

int lateness = 0;

cout << "最优调度:" << endl;

for (int i = 0; i < num; ++i)

{

cout << start << ' ' << jobs[i].time + start << endl;

start += jobs[i].time;

lateness += max(0, start - jobs[i].deadline);

}

cout << "最小延迟时间:" << lateness << endl;

return 0;

}

bool comp(JOB &a, JOB &b)

{

return a.deadline < b.deadline;

}

测试:

最小延迟调度问题算法c语言,【算法概论】贪心算法:最小延迟调度问题相关推荐

  1. 任务分配算法c语言程序,程序员算法基础——贪心算法

    原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...

  2. 哈夫曼编码压缩率计算_程序员的算法课(8)-贪心算法:理解霍夫曼编码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...

  3. 程序员的算法课(8)-贪心算法:理解霍夫曼编码

    一.一种很贪婪的算法定义 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. [百度百科]贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体 ...

  4. 算法基础(Java)--贪心算法

    前言 前面简单的介绍了八大经典排序算法,此文将要介绍贪心算法,并介绍一些常见贪心算法题目. 1. 贪心算法的概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最 ...

  5. 算法导论-上课笔记7:贪心算法

    文章目录 0 前言 1 活动选择问题 1.1 活动选择问题的最优子结构 1.2 贪心选择 1.3 递归贪心算法 1.4 迭代贪心算法 2 贪心算法原理 2.1 贪心选择性质 2.2 最优子结构 2.3 ...

  6. 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)

    数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...

  7. 算法学习笔记22:贪心算法

    目录 贪心算法:如何用贪心算法实现Huffman压缩编码 如何理解"贪心算法" 贪心算法实战分析 1.分糖果 2. 钱币找零 3. 区间覆盖 解答开篇 内容小结 贪心算法:如何用贪 ...

  8. 五大常用算法入门(一)——贪心算法

    文章目录 1.贪心算法简介 1.1 基本定义 1.2 贪心算法案例 1.3.贪心算法的基本思路 2.贪心算法最优性证明 2.1 贪心算法的前提 2.2 最优子结构 2.3 贪心算法与动态规划的区别 3 ...

  9. 算法基础--优惠券问题(贪心算法)

    算法基础–优惠券问题(贪心算法) 近期某商场由于周年庆,开启了"0元购"活动.活动中,消费者可以通过组合手中的代金券,实现0元购买指定商品. 聪明的小团想要用算法来帮助他快速计算: ...

  10. 算法设计与分析:贪心算法 - 排课问题(DP与贪心的区别与应用)

    文章目录 前言 贪心算法概念 排课问题 问题描述与分析 动态规划求解 简化问题应用贪心算法 总结 本文参考UCAS卜东波老师算法设计与分析课程撰写 前言 前面两大章节的内容分治思想与动态规划暂时告一段 ...

最新文章

  1. 上机7 java异常处理,Java之异常处理【7】
  2. 你稀里糊涂学的算法复杂度,原来这么简单!
  3. Python模块之间的相互引用问题
  4. opencv3—— cv::putText()
  5. 修改mysql数据库存放路径
  6. 两个数组结果相减_学点算法(三)——数组归并排序
  7. 如何导入任何JBoss BRMS示例项目
  8. SQL SERVER-Extendevent系统视图
  9. 解决bash: mysql: command not found 的方法【linux mysql命令 】
  10. 网络工程师职业规划(三)
  11. 软件实习项目4——校园一卡通管理系统(实验准备与设计)
  12. MySQL恢复数据库(mysql命令)
  13. ps投影怎么做之教程:人像投影和物体长投影制作
  14. linux 下配置可视化git 冲突合并工具kdiff3
  15. springboot获取客户端IP及IP归属地
  16. 五、Ceph之RBD存储使用
  17. c++ 函数之间 传递向量_将向量传递给C ++中的函数
  18. 【微信小程序】—— 如何在app.js 和其他页面中更改globalData的值
  19. 《计算机网络--自顶向下方法》第二章--应用层
  20. 1.网络相关TFTP

热门文章

  1. php怎么输出3个函数和,PHP利用var_dump,var_export,print_r三个函数的区别示例
  2. kmeans实际应用例子 java_k-means聚类JAVA实例
  3. 【redis】缓存击穿、雪崩、穿透
  4. mobile former测试
  5. win10 linux子系统
  6. win10+VS2015+pycaffe编译
  7. couldn't find native method
  8. OpenCV 3最新模块介绍
  9. Failed to initialize NSS library
  10. php排除无效字查询,php删除无效的字符