Python实现--贪心算法与活动安排问题
2017-12-17 19:22
471 查看
参考:http://blog.csdn.net/liufeng_king/article/details/8709005
如题:给出一组活动,告诉每个活动的开始时间和结束时间,要求出算出能参加的最多活动的数量或者活动的起止时间
s = [2,1,3]
f = [3,4,5]
通过比较下一个活动的开始时间与上一个活动的结束时间的大小关系,确定这两个活动是否是相容的,如果开始时间大于结束时间,则相容,反之不相容,代码如下
执行结果如下:输入11个活动的起止时间,输出相容的活动的起止时间
如题:给出一组活动,告诉每个活动的开始时间和结束时间,要求出算出能参加的最多活动的数量或者活动的起止时间
贪心算法思路:
用两个数组s,f分别存储活动的起止时间,根据活动的结束时间对活动进行一个非减的活动序列,同样活动的开始时间list也要做对应的调整,这里博主是通过冒泡排序同步交换的,举例:活动(1,4)(2,3)(3,5)那么我们得到的s = [2,1,3]
f = [3,4,5]
通过比较下一个活动的开始时间与上一个活动的结束时间的大小关系,确定这两个活动是否是相容的,如果开始时间大于结束时间,则相容,反之不相容,代码如下
#用冒泡排序对结束时间进行排序,同时得到对应的开始时间的list def 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,f def 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 a n = 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个活动的起止时间,输出相容的活动的起止时间
相关文章推荐
- 浅谈Python实现贪心算法与活动安排问题
- 算法Java实现--贪心算法--活动安排问题
- 活动安排问题(C语言实现)——贪心算法应用(2)
- 活动选择问题(活动安排问题)(最大数目活动选择问题)贪心算法C++实现
- 活动选择问题(活动安排问题)(最大数目活动选择问题)贪心算法C++实现
- 活动安排问题python实现
- 活动安排 贪心算法实现
- 活动安排问题--贪心算法
- 活动安排问题 贪心算法
- 算法分析与设计-13-活动安排问题的贪心算法
- 贪心算法之活动安排问题
- 活动安排问题 贪心算法
- 活动安排问题-贪心算法
- 活动安排问题(贪心算法)
- ACM--贪心算法--活动安排问题
- 0021算法笔记——【贪心算法】贪心算法与活动安排问题
- 活动安排问题(贪心算法) 推荐
- 贪心算法(找零钱、活动安排)java实现
- 0021算法笔记——【贪心算法】贪心算法与活动安排问题
- 活动安排问题(贪心算法)