活动安排问题要求高效地安排一系列争用某一公共资源的活动,贪心算法提供了一个简单的方法,使尽可能多的活动能兼容地使用公共资源。贪心算法并不总能求得问题的整体最优解,但对于活动安排问题,贪心算法却能做到,使得最终所确定的相容活动集合的规模最大,证明不在这里给出。代码如下:
def greedyManage(meeting): length=len(meeting) meeting.sort(key=lambda x:x[1]) result=[False for i in range(length)] j=0 #当前选中的活动 result[j]=True #选中第一个活动 for i in range(1,length): if meeting[i][0]>=meeting[j][1]: j=i result[j]=True return result def show(result): length=len(result) print('安排的活动为:') count=0 for i in range(length): if result[i]: print('第',i+1,'个活动') count+=1 print('\n共计',count,'个活动') if __name__=='__main__': meetings=[(1,4),(3,5),(0,6),(5,7),(3,8),(5,9),(6,10),(8,11),(8,12),(2,13),(12,14)] res=greedyManage(meetings) show(res)
meetings是一个list,里面每个tuple是一个活动的起始时间和结束时间,刚开始是乱序的,首先要按照每个活动的结束时间升序排列,然后首先默认选择第一个活动,依次遍历所有活动找出相容的活动,最后输出结果如下:
转载请注明:转自http://blog.csdn.net/littlethunder/article/details/26449245