前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >贪心算法-活动选择问题(Python实现)

贪心算法-活动选择问题(Python实现)

作者头像
手撕代码八百里
发布2020-07-29 09:55:45
1K0
发布2020-07-29 09:55:45
举报
文章被收录于专栏:猿计划猿计划猿计划
# 有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相容。
# 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,
# 是可以用贪心算法有效求解的很好例子。
# 该问题要求高效地安排一系列争用某一公共资源的活动。
# 贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。
import ioTool

#编程任务:在所给的活动集合中选出最大的相容活动子集合。
def recursive_activity_selector(s,f,k,n):
    m = k + 1
    while m <= n and s[m] < f[k]:
        m = m + 1
    if m <= n:
        return str(m) + " "+ str(recursive_activity_selector(s,f,m,n))
    else:
        return " "

if __name__ == '__main__':
    s = [0,1,3,0,5,3,5,6,8,8,2,12]  #开始时间
    f = [0,4,5,6,7,9,9,10,11,12,14,16]  #结束时间
    print(len(s),len(f))
    n = 11
    k = 0
    res = recursive_activity_selector(s, f, k, n)
    print(res)
    ioTool.writeLine(res,"output1.txt")

结果:

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结果:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档