zoukankan      html  css  js  c++  java
  • 任务安排问题

    问题描述

           活动的定义

    • 设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)

  • 相关阅读:
    数据库范式
    数据存储——SQLite数据库存储——SQL语句
    学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)
    数据存储——SQLite数据库存储——SQLite数据库
    数据存储——手机外部文件存储
    数据存储——手机内部文件存储2
    数据存储——手机内部文件存储
    制作一个登录界面,以SP方式存储用户名。用户下次登录时自动显示上次填写的用户名
    数据存储——SP存储 SP读取
    View(视图)——消息
  • 原文地址:https://www.cnblogs.com/zqybegin/p/13581102.html
Copyright © 2011-2022 走看看