最小延迟调度问题算法c语言,【算法概论】贪心算法:最小延迟调度问题
最小延迟调度问题 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语言,【算法概论】贪心算法:最小延迟调度问题相关推荐
- 任务分配算法c语言程序,程序员算法基础——贪心算法
原标题:程序员算法基础--贪心算法 前言 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. 比如一道常见的算法笔试题跳一跳: 有n个盒子排成一行,每个盒子上面有一个数字a[i],表示最 ...
- 哈夫曼编码压缩率计算_程序员的算法课(8)-贪心算法:理解霍夫曼编码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/ ...
- 程序员的算法课(8)-贪心算法:理解霍夫曼编码
一.一种很贪婪的算法定义 贪心是人类自带的能力,贪心算法是在贪心决策上进行统筹规划的统称. [百度百科]贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体 ...
- 算法基础(Java)--贪心算法
前言 前面简单的介绍了八大经典排序算法,此文将要介绍贪心算法,并介绍一些常见贪心算法题目. 1. 贪心算法的概念 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最 ...
- 算法导论-上课笔记7:贪心算法
文章目录 0 前言 1 活动选择问题 1.1 活动选择问题的最优子结构 1.2 贪心选择 1.3 递归贪心算法 1.4 迭代贪心算法 2 贪心算法原理 2.1 贪心选择性质 2.2 最优子结构 2.3 ...
- 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)
数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...
- 算法学习笔记22:贪心算法
目录 贪心算法:如何用贪心算法实现Huffman压缩编码 如何理解"贪心算法" 贪心算法实战分析 1.分糖果 2. 钱币找零 3. 区间覆盖 解答开篇 内容小结 贪心算法:如何用贪 ...
- 五大常用算法入门(一)——贪心算法
文章目录 1.贪心算法简介 1.1 基本定义 1.2 贪心算法案例 1.3.贪心算法的基本思路 2.贪心算法最优性证明 2.1 贪心算法的前提 2.2 最优子结构 2.3 贪心算法与动态规划的区别 3 ...
- 算法基础--优惠券问题(贪心算法)
算法基础–优惠券问题(贪心算法) 近期某商场由于周年庆,开启了"0元购"活动.活动中,消费者可以通过组合手中的代金券,实现0元购买指定商品. 聪明的小团想要用算法来帮助他快速计算: ...
- 算法设计与分析:贪心算法 - 排课问题(DP与贪心的区别与应用)
文章目录 前言 贪心算法概念 排课问题 问题描述与分析 动态规划求解 简化问题应用贪心算法 总结 本文参考UCAS卜东波老师算法设计与分析课程撰写 前言 前面两大章节的内容分治思想与动态规划暂时告一段 ...
最新文章
- 上机7 java异常处理,Java之异常处理【7】
- 你稀里糊涂学的算法复杂度,原来这么简单!
- Python模块之间的相互引用问题
- opencv3—— cv::putText()
- 修改mysql数据库存放路径
- 两个数组结果相减_学点算法(三)——数组归并排序
- 如何导入任何JBoss BRMS示例项目
- SQL SERVER-Extendevent系统视图
- 解决bash: mysql: command not found 的方法【linux mysql命令 】
- 网络工程师职业规划(三)
- 软件实习项目4——校园一卡通管理系统(实验准备与设计)
- MySQL恢复数据库(mysql命令)
- ps投影怎么做之教程:人像投影和物体长投影制作
- linux 下配置可视化git 冲突合并工具kdiff3
- springboot获取客户端IP及IP归属地
- 五、Ceph之RBD存储使用
- c++ 函数之间 传递向量_将向量传递给C ++中的函数
- 【微信小程序】—— 如何在app.js 和其他页面中更改globalData的值
- 《计算机网络--自顶向下方法》第二章--应用层
- 1.网络相关TFTP
热门文章
- php怎么输出3个函数和,PHP利用var_dump,var_export,print_r三个函数的区别示例
- kmeans实际应用例子 java_k-means聚类JAVA实例
- 【redis】缓存击穿、雪崩、穿透
- mobile former测试
- win10 linux子系统
- win10+VS2015+pycaffe编译
- couldn't find native method
- OpenCV 3最新模块介绍
- Failed to initialize NSS library
- php排除无效字查询,php删除无效的字符