算法作业十(贪心算法)

本文介绍了如何使用贪心算法解决活动选择问题,即在有限的资源下,尽可能选择更多的活动进行。通过分析,选择了以最早结束时间为优先级的贪心策略,以最大化资源的利用。文章详细讨论了时间复杂度和空间复杂度,整体时间复杂度为O(nlog(n)),空间复杂度为O(1)。
摘要由CSDN通过智能技术生成

1.问题
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。
目标是尽可能选择更多的会议来使用资源。
2.解析
1.选择最早开始时间且不与已安排会议重叠的会议
2.选择使用时间最短且不与已安排会议重叠的会议
3.选择最早结束时间且不与已安排会议重叠的会议
三个贪心策略中应该选择第三个,因为在这道题的情景之下,贪心的对象应该转化为使剩余时间的可安排时间段尽可能大,以便之后的会议能够有更多的时间来进行。
3.设计

//A存储的是成对信息 A[i]代表的是第i个会议
//有两个属性,begin开始时间,end结束时间
//num代表的是一共有多少个会议
ARRANGE_MEETING(A,num)
    SORT_ASC(A) //根据end结束时间进行降序排序,如果end相同,则根据begin来进行排序
    NOW_END = A[0].end //选择第一个会议
    CNT=1 //记录选择了几个会议
    for i = 1 to num:
        if A[i].begin >= NOW_END:
            NOW_END = A[i].end
            CNT++
    return CNT;

4.分析
1.时间复杂度由两部分构成,分别是排序所需要的时间以及遍历一遍所需要的时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值