1.最小延迟调度问题描述

f(i) 表示某任务 开始的时间。ti  表示 某任务 加工的时间di  表示 某任务 要求完成的时间延迟:  f(i)+ti-di
  • 如果 实际完成的时间 小于 规定完成时间,那么,就没有 延迟。延迟就是拖延,如果你在规定时间内(<=规定时间),那么,就说明没有延迟,没有拖延。
  • 由于有很多用户,所以,会有很多不同的拖延值,我们的目标是,求得所有拖延值中的最大值,并使得这个最大的拖延值 最小。Min(Max拖延值)

2.举例理解调度问题

f1(1)为什么为0 ,因为 f(1)=0,t1=5,而 d=10,就是说,用户一在规定时间内完成了任务,当然没有延迟。用户二的延迟:13-12=1用户三的延迟: 17-15=2 用户四的延迟: 27-11=16用户五的延迟: 30-20=10所以,在这个调度的条件下,最大的延迟是 第四个用户:16.


按照规定的截止时间安排,这里D的顺序是: {10,11,12,15,20}

对应客户需要加工的时间排序就变成了:{5,10,8,4,3}

 用户一的延迟为: 因为 5<10,所以,延迟为0用户二的延迟为: 23-12=11用户三的延迟为: 27-15=12用户四的延迟为: 15-11=4用户五的延迟为: 30-20=10在这种情况下,最大的延迟是 12.

可见,不同的调度策略,得到的最小调度延迟值是不一样的。

对于贪心算法,如果要验证策略的正确性,可以通过举反例的方式。

  • 对于策略1,按照 加工时间的长短 安排,肯定是 用户一 先安排,此时,用户一的 需要1个时间单位完成,用户二在 第11个时间单位 完成,
    用户一没有时间延迟,用户二的时间延迟为 1 。
  • 但是,如果我们先加工第二个任务,任务二在 第10个时间单位结束, 规定结束时间为10 ,此时的延迟为0。第一个任务的加工时间为1,结束时间是 11,此时, 11<100,延迟也为 0 。
  • 对于策略 2: 根据 d-t 的大小,我们应该优先安排 用户二,此时用户一的时间延迟是 11-2=9. 用户二的时间延迟为0。
    但是,我们如果优先安排用户一,此时用户一的时间延迟是0,用户二的时间延迟是1. 1<9

对于策略 3,是正确的,我们看看伪码

正确性证明:

code

/*
最小延迟调度问题
越前浩波
*/#include<iostream>
using namespace std;
#define N 100//也可以用sort()
struct Mission
{int num;int last;int end;
};//
void QuickSort(Mission *mi,int f,int t)
{if(f<t){int i=f-1,j=f;Mission m=mi[t];while(j<t){if(mi[j].end<=m.end){i++;Mission tmp=mi[i];mi[i]=mi[j];mi[j]=tmp;}j++;}Mission tmp1=mi[t];mi[t]=mi[i+1];mi[i+1]=tmp1;QuickSort(mi,f,i);QuickSort(mi,i+2,t);}
}
int main()
{int n;cout<<"请输入任务总数:"<<endl;cin>>n;Mission mi[N];//Mission[0]~Mission[n-1]int start[N+1];//排好序的任务的开始时间,start[1]~start[n]int i;for(i=0;i<n;i++){mi[i].num=i+1;cout<<"任务"<<i+1<<"的持续时间为:";cin>>mi[i].last;cout<<"任务"<<i+1<<"的截止时间为:";cin>>mi[i].end;}QuickSort(mi,0,n-1);int delay=0,m=0;start[1]=0;if(start[1]+mi[0].last>mi[0].end){delay=start[1]+mi[0].last-mi[0].end;//如果开始时间+持续时间>截止时间,累计延迟}for(i=1;i<n;i++){start[i+1]=start[i]+mi[i-1].last;if(start[i+1]+mi[i].last>mi[i].end){m=start[i+1]+mi[i].last-mi[i].end;if(delay < m)delay = m;}}cout<<"最大延迟为:"<<delay<<endl;for(i=0;i<n;i++){cout<<"任务"<<mi[i].num<<"的执行时间:["<<start[i+1]<<","<<mi[i].last+start[i+1]<<"]"<<endl;}system("pause");
}

最小延迟调度问题——贪心算法(C++实现)相关推荐

  1. 最小延迟调度问题算法c语言,【算法概论】贪心算法:最小延迟调度问题

    最小延迟调度问题 Scheduling to Mnimizing Lateness 问题描述: 假定有一单个的资源在一个时刻只能处理一个任务.现给定一组任务,其中的每个任务 i 包含一个持续时间 ti ...

  2. 贪心算法下的两大经典问题:最优装载问题、最小延迟调度问题

    上一篇主要介绍了贪心算法的内容和活动选择问题.本篇主要介绍最优装载问题和最小延迟调度问题 1.最优装载问题 什么是最优装载问题 类似于0-1背包问题那样,有n个集装箱1,2,-,n装上轮船,集装箱i的 ...

  3. 列车调度(贪心):单机调度问题贪心算法

    单机调度问题贪心算法 #题目:火车站的列车调度铁轨的结构如下图所示. 两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道.每趟列车从入口可以选择任意一条轨道 ...

  4. 55天 -算法 - poj4137百炼最小新整数 -贪心算法

    //模板#include <iostream> #include <cstdio> #include <cstring> using namespace std;/ ...

  5. 贪心算法 -- 最小延迟调度

    转自:https://blog.csdn.net/bqw18744018044/article/details/80285414 总结: 首先,证明贪心的时候交换论证是万能的!其次,这一点如果要满足, ...

  6. java调度问题的贪心算法_java代码,多机调度问题,怎么解释

    展开全部 多机调度问题的Java实现(贪心算法) 具体问题描述以及C/C++实现参见网址e68a843231313335323631343130323136353331333361323564[jav ...

  7. 程序员都会的五大算法之三(贪心算法),恶补恶补恶补!!!

    前言 点击查看算法介绍 五大算法 分治算法 动态规划 贪心算法 回溯算法 分支限界算法 WX搜素"Java长征记"对这些算法也有详细介绍. 贪心算法 一.算法概述 贪心算法也叫贪婪 ...

  8. 贪心算法:旅行商问题(TSP)

    TSP问题(Traveling Salesman Problem,旅行商问题),由威廉哈密顿爵士和英国数学家克克曼T.P.Kirkman于19世纪初提出.问题描述如下: 有若干个城市,任何两个城市之间 ...

  9. 数据结构——贪心算法

    最近开始学习王争老师的<数据结构与算法之美>,通过总结再加上自己的思考的形式记录这门课程,文章主要作为学习历程的记录. 首先来看一个例子,假设我们有一个可以容纳100kg物品的背包 为了使 ...

最新文章

  1. ffmpeg连接超时与解码超时
  2. 用python绘制漂亮的图形-用Python画一些漂亮图形--Quora代码赏析
  3. Matlab绘制不同阻尼下的系统响应
  4. class path resource [log4j.properties] cannot be resolved to URL because it does not exist
  5. win10 cortana 搜索无效怎么解决
  6. Dom4j完整教程~Document对象相关
  7. git基本概念与核心命令_Git:了解核心版本控制概念的初学者指南
  8. 提前批无笔试,3天后截止!!字节跳动智能创作实验室-图像团队2022秋招提前批投递...
  9. codeforces 816 E. Karen and Supermarket(树形dp)
  10. iOS Design Patterns Excerpt
  11. html 手机语音聊天,好用的手机语音聊天软件推荐
  12. 弱电计算机网络系统技术交底,弱电综合布线施工技术交底.doc
  13. matlab趣味程序,小学生C++趣味编程 PDF 全资料版
  14. 使用Python对淘宝用户行为进行数据分析
  15. [bat] cmd命令进入用户登录界面和屏幕保护程序
  16. 如何用java打印1-100_在java中使用10个线程打印1到100
  17. LaTex 解决目录红框问题
  18. 映客财报:翻身与社交突围
  19. 人脸识别主板人脸识别整机如何发送闸机开关指令继电器关闸开闸
  20. IBM T61 笔记本风扇控制软件

热门文章

  1. 安装Debian-9(Stretch)服务器图文教程
  2. TCP/IP五层模型(五层因特网协议栈)||| OSI参考模型|||数据的封装与解封装
  3. 关于缓存穿透,缓存击穿,缓存雪崩,热点数据失效问题的解决方案(转)
  4. mac chrome 跨域
  5. 您应该知道的ES2020中的10个JavaScript新功能
  6. javascript入门_JavaScript入门手册(2020版)
  7. 二进制数据结构:JavaScript中的树和堆简介
  8. Python中的顺序表
  9. python3生成器类题目易错写法
  10. finalize到底是什么