菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
22
0

任务安排问题

原创
05/13 14:22
阅读数 96775

问题描述

       活动的定义

  • 设S={1,2,…,n}是n个活动的集合,各个活动使用同一个资源,资源在同一时间只能为一个活动使用。
  • 每个活动i有起始时间si,终止时间fi,s≤ fi
  • 活动i和j是相容的,若s≤ fi或s≤ fj。

       输入:S={1, 2, …, n},F={ [si,fi] },n ≤ i ≤ 1

       输出:S的最大相容集合

算法描述

     1. 确定贪心思想

       为了可以使得更多的相容活动被包含,每次选fi最小的活动,使得我们能够选择更多的活动。

     2. 分析贪心选择性

       引理1:设:S={1,2,…,n}是n个活动的集合,[s,fi]是活动i的起始终止时间,且f1≤f2≤….≤fn那么,S的任务安排问题的某个优化解包括活动1.

       证明:设A是一个优化解,按结束时间排序A中活动, 设其第一个活动为k,第二个活动为j.

  • 如果k=1,引理成立.
  • 如果k≠1,令 B=A-{k}∪{1}, 由于A中活动相容,f1 ≤ f, B中活动相容. 因为|B|=|A|, 所以B是一个优化解,且包括活动1.

     3.分析优化子结构

       引理2:设:S={1, 2, …, n}是n个活动集合,[si,fi]是活动i的起始终止时间,且f1≤f2≤….≤fn ,设A是S的任务安排问题的一个优化解且包括活动1,A'=A-{1} 是S'={ i 属于 S|si≥f1  }的调度问题的优化解.

       证明:显然,A'是相容的,仅仅需要证明A'是S'任务安排问题的解决方案中最大的解就可以。

       如若不然,则存在一个S'任务安排问题的最优解B',而S'中的所有活动均与活动1进行相容,那么可以构造B ={1}UB',而B是S问题的解,且|B|>|A|,那么A就不是S问题的最优解,矛盾。故而A’是S‘任务安排问题的解决方案中最大解。

     4.分析算法正确性

      设:S={1, 2, …., n} 是 n 个活动集合,f0 = 0, li是 Si ={  j属于S | sj ≥ f i-1} 中具有最小结束时间的活动.设A是S的包含活动1的优化解, 其中 f1≤ …≤fn则 A = U(i=1 : k) {li}。

      证明:

     5.设计算法

        根据贪心思想设计算法。

设f1≤f2≤….≤fn已排序)
Greedy-Activity-Selector(S, F) 
n = lenyth(S);
A = {1}
j = 1
For i=2 To n Do
     If si >= fj
     Then A = A∪{i};
              j = i;
Return A

  6.算法复杂性分析:

       时间复杂性:

          如果结束时间已经排序,那么T(n) = O(n)

          如果结束时间已经排序,那么T(n) = O(n) + O(nlogn) = O(nlogn)

 

发表评论

0/200
22 点赞
0 评论
收藏