zoukankan      html  css  js  c++  java
  • 贪心法之最小延迟调度问题

    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,是正确的,我们看看伪码

     

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

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

  • 相关阅读:
    List集合
    类加载机制
    代码优化
    JVM字节码
    Tomcat优化之Apache Jmeter压力测试工具
    Tomcat优化
    JVM垃圾收集器
    lambda表达式
    java 内部类
    java多线程3种方式
  • 原文地址:https://www.cnblogs.com/cy0628/p/13963714.html
Copyright © 2011-2022 走看看