python 贪心算法活动场所安排问题

该篇文章介绍了一种通过贪心算法对给定活动按开始时间进行排序,以最少场所安排所有活动的方法。通过一轮轮筛选,活动ac被分为了三个场所:a,b,e在场所一;f,g,d在场所二;c在场所三。
摘要由CSDN通过智能技术生成

如何安排下列活动使得使用的活动场所最少,并给出具体的安排方案

活动abcdefg
开始0349716
完成277111058

我们可以通过开始时间对活动进行排序以便于尽量让一个场所排更多的活动,第一轮通过比较前一个活动的的结束时间和下一个活动的开始时间比较,来判断此活动能否加入当前场所,若可以则加入此场所,若不可以,则存入另一个组合加入下一轮的比较,每一轮会产生一个新场所。

利用贪心算法思想通过一轮一轮的筛选,直到没有活动未被安排截止,每一轮的筛选都代表的场所,通过对开始时间排序可以让一个场所尽可能的安排更多活动。

ac=[['a',0,2],['b',3,7],['c',4,7],['d',9,11],['e',7,10],['f',1,5],['g',6,8]]#将活动存入数组
ac.sort(key=lambda x:x[1],reverse=False)#对数组按照开始时间进行从小到大的排序
place=[[0,0,0]]#用来存入此轮可以当前场所的活动,初始值设置0以便于比较
left=[]#用来接收当前被此场所淘汰的活动
arrange=[]#接收每一轮活动安排方案,每一轮代表一个场所
while True:
    for i in ac:
        if i[1]>=place[-1][2]:#通过比较此活动的开始时间和当前场所最后一个活动的结束时间来判断此活动能否加入当前场所
            place.append(i)
        else:
            left.append(i)#被淘汰的活动将进入下一个场地的比较
    ac=pass[:]#接收上一场所未被安排的活动以便进入下一轮循环
    arrange.append(place)#添加当前场所的安排的总活动
    left=[]
    place=[[0,0,0]]#将pass和place回复初始以便重新接收下一轮参数
    if len(ac)==0:#当ac接收的未被安排的活动为0时则全部活动已被安排跳出循环
        break

print("活动安排为{},所需场所数为{}".format(arrange,len(arrange)))

运行结果

[0,0,0]是初始设置的,不代表一活动,

则可以分为三个场所

场所一:a,b,e

场所2:f,g,d

场所3:c

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值