Python实现--贪心算法与活动安排问题

来源:互联网 发布:网络考试系统破解版 编辑:程序博客网 时间:2024/05/22 17:24

参考:http://blog.csdn.net/liufeng_king/article/details/8709005
如题:给出一组活动,告诉每个活动的开始时间和结束时间,要求出算出能参加的最多活动的数量或者活动的起止时间

贪心算法思路:

用两个数组s,f分别存储活动的起止时间,根据活动的结束时间对活动进行一个非减的活动序列,同样活动的开始时间list也要做对应的调整,这里博主是通过冒泡排序同步交换的,举例:活动(1,4)(2,3)(3,5)那么我们得到的

s = [2,1,3]
f = [3,4,5]

通过比较下一个活动的开始时间与上一个活动的结束时间的大小关系,确定这两个活动是否是相容的,如果开始时间大于结束时间,则相容,反之不相容,代码如下

#用冒泡排序对结束时间进行排序,同时得到对应的开始时间的listdef bubble_sort(s,f):    for i in range(len(f)):        for j in range(0,len(f)-i-1):            if f[j] > f[j+1]:                f[j], f[j+1] = f[j+1],f[j]                s[j],s[j+1] = s[j+1],s[j]    return s,fdef greedy(s,f,n):    a = [True for x in range(n)]    #初始选择第一个活动    j = 0    for i in range(1,n):        #如果下一个活动的开始时间大于等于上个活动的结束时间        if s[i] >= f[j]:            a[i] = True            j = i        else:            a[i] = False    return an = int(input())arr = input().split()s = []f = []for ar in arr:    ar = ar[1:-1]    start = int(ar.split(',')[0])    end = int(ar.split(',')[1])    s.append(start)    f.append(end)s,f = bubble_sort(s,f)A = greedy(s,f,n)res = []for k in range(len(A)):    if A[k]:        res.append('({},{})'.format(s[k],f[k]))print(' '.join(res))

执行结果如下:输入11个活动的起止时间,输出相容的活动的起止时间
这里写图片描述

原创粉丝点击