最小延迟调度问题算法c语言,贪心法之最小延迟调度问题

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

9429c82219b15e4d0c6abf2f26d64e6a.png

f(i) 表示某任务 开始的时间。

ti  表示 某任务 加工的时间

di  表示 某任务 要求完成的时间

延迟:  f(i)+ti-di

如果  实际完成的时间 小于 规定完成时间,那么,就没有 延迟。延迟就是拖延,如果你在规定时间内(<=规定时间),那么,就说明没有延迟,没有拖延。

由于有很多用户,所以,会有很多不同的拖延值,我们的目标是,求得所有拖延值中的最大值,并使得这个最大的拖延值 最小。Min(Max拖延值)

2.举例理解调度问题

0f192d7a06053c1fb59a74f151d667dd.png

f1(1)为什么为0 ,因为 f(1)=0,t1=5,而 d=10,就是说,用户一在规定时间内完成了任务,当然没有延迟。

用户二的延迟:13-12=1

用户三的延迟: 17-15=2

用户四的延迟: 27-11=16

用户五的延迟: 30-20=10

所以,在这个调度的条件下,最大的延迟是 第四个用户:16.

55d624f80a0b2e1a2f9f7fdcc0de1623.png

按照规定的截止时间安排,这里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.

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

290100210df2982cfdc5482354928ae2.png

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

对于策略1,按照 加工时间的长短 安排,肯定是 用户一 先安排,此时,用户一的 需要1个时间单位完成,用户二在 第11个时间单位  完成, 用户一没有时间延迟,用户二的时间延迟为 1 。

但是,如果我们先加工第二个任务,任务二在 第10个时间单位结束, 规定结束时间为10 ,此时的延迟为0 。第一个任务的加工时间为1,结束时间是 11,此时, 11<100,延迟也为 0 。

对于策略 2: 根据 d-t 的大小,我们应该优先安排 用户二,此时用户一的时间延迟是  11-2=9. 用户二的时间延迟为0。 但是,我们如果优先安排用户一,此时用户一的时间延迟是0,用户二的时间延迟是1.  1<9

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

fa95c097fa22a398430f423536ebd403.png

对于刚刚这个实例是正确的,那么,对于所有的实例是不是都正确呢,下面给出正确性证明:

2d505519c094ae6b91874f6068fd0f63.png

9f98008fab59c79087ee9bb3d8759f64.png

e8c11b16a749da1f54057fde3d7a430b.png

2e8a9b5d4c21ad9841e373caceced0bf.png

267e3dc7114b1fbdff065b8adc501027.png

3398002ad0bfa6c735a77bb1943ae451.png

参考:北大《算法设计与分析》公开课

标签:11,10,时间延迟,调度,用户,时间,贪心,延迟

来源: https://www.cnblogs.com/cy0628/p/13963714.html

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值