活动安排问题—贪心算法—java实现

这篇博客介绍了如何使用贪心算法来解决活动安排问题,通过分析贪心选择性质并展示核心代码,最终提供完整的Java实现,通过运行展示了算法的有效性。
摘要由CSDN通过智能技术生成

目标

在所给的活动集合中选出一个最大的相容活动子集和。
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源(如一个阶梯教室等),而在
同一时间内只有一个活动能使用这一资源。

1、每个活动i都有一个要求使用该资源的起始时间startTime和一个结束时间endTime,
且0<=startTime < endTime。
2、如果选择了活动i,则它在半开时间区间[startTime, endTime)内占用资源。
3、若区间[[startTimei, endTimei)与区间[[startTimej, endTimej)不相交,则称活动i与
活动j是相容的。
也就是说,当startTimei ≥ endTimej 或 endTimei ≥ startTimej时,活动i与活动j相容。

贪心选择

选择这样一个活动:选出它后,剩下的资源应能被尽量多的其他任务所用
直觉告诉我们,应该选择E中最早结束的活动,因为它剩下的资源可供它之后尽量
多的活动使用。这个选择的正确性可以证明,有兴趣的同学可以查查看。
我的做法是将活动定义为一个类,属性有开始时间—startTime、结束时间—endtTime、
活动名称—name,类中还实现了对活动排序的接口:
public static class ACs implements Comparable<ACs>{

        private int startTime;//开始时间
        private int endTime;//结束时间
        private String name;//活动名称

        public ACs(int startTime, int endTime,String name) {
            super();
            this.startTime = startTime;
            this.endTime = endTime;
            this.name = name;
        }

        public ACs() {
            super();
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值