JAVA代码—算法基础:贪心算法在活动安排问题中的应用

贪心算法在活动安排问题中的应用

问题描述

有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个活动场地可以利用,活动之间不能交叠,求最多安排多少个活动?

活动安排

问题分析

活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。

活动1 的开始时间s(1)=1,结束时间f(1)=4,它与活动2 是不兼容的。因为,活动1 还没有结束,活动2 就开始了(s(2) < f(1))。

活动2 与 活动4 是兼容的。因为,活动2的进行区间是[3,5) 而活动4的进行区间是[5,7)

目标是:在N个活动中,找出最大兼容的活动个数。

贪心算法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

虽然贪心算法并不总能求得问题的整体最优解。但对于活动安排问题,贪心算法greedySelector却总能求得整体最优解,即它最终所确定的相容活动集合的规模最大。这个结论可以用数学归纳法证明。

贪心算法greedySelector一开始选择活动1 ,并将j初始化为1。然后依次检查活动i是否与当前已选择的所有活动相容。若相容则将活动i加入已选择活动的集合中;否则,不选择活动i,而继续检查下一活动与集合中活动的相容性。由于fi总是当前集合中所有活动的最大结束时间,故活动i与当前集合中所有活动相容的充分且必要条件是其开始时间si不早于最近加入集合的活动j的结束时间fi,即 si>=fj。若活动i与之相容,则i

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值