zoukankan      html  css  js  c++  java
  • 作业10 相容问题

    1.     问题

    设S={1,2,…,n}为活动的集合,si和fi分别为活动i的开始和截止时间,i = 1,2…n。求出一个活动序列,使得这个序列中任意两个活动i,j满足 si=<fj或者sj =< fi(即不相容).

    2.     解析

    主要使用贪心算法来对问题进行解决,主要策略是把活动按照截止时间从小到大排序,然后从前向后挑选,只要与前面选中的活动相容,就可以把活动选入。

    贪心算法反例:把活动按照开始时间从小到大排序,然后从前向后挑选,只要与前面选中的活动相容,就可以把活动选入。

    正常贪心:

    i

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    Si

    3

    1

    3

    3

    7

    3

    1

    3

    6

    8

    Fi

    4

    5

    5

    6

    8

    8

    9

    9

    10

    10

    反例贪心:

    i

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    Si

    1

    1

    3

    3

    3

    3

    3

    6

    7

    8

    Fi

    5

    9

    4

    5

    6

    8

    9

    10

    8

    10

    由表可以看出反例求出的最大值并不正确

    3.     设计

    对所有活动进行排序

    Sep来存储上次选中的活动的结束时间,初始化为0

    For I from 0 to 活动的数量

           如果活动i的开始时间 >= sep

                  将活动i选出

                  将活动i的结束时间设置为sep

    4.     分析

    算法主要有两部分组成,选活动与排序,选活动就进行了一次遍历,复杂度为n,排序的复杂度为O(nlogn),因此整体复杂度为O(nlogn)

    5.     源码

    https://github.com/fanchile/Algorithm

  • 相关阅读:
    2021.Jan.11.Mon
    Samba
    nfs
    python数据类型(字典dictionary2)
    python数据类型(字典dictionary1)
    python数据类型(元祖tuple)
    python数据类型(列表List2)
    python数据类型(列表List1)
    python数据类型(字符串String2)
    python数据类型(数字Numbers)
  • 原文地址:https://www.cnblogs.com/Fanchile/p/12803512.html
Copyright © 2011-2022 走看看