国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

淺談Python實現貪心算法與活動安排問題

2020-02-16 11:11:00
字體:
來源:轉載
供稿:網友

貪心算法

原理:在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的局部最優解。貪心算法不是對所有問題都能得到整體最優解,但對范圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。

特性:貪心算法采用自頂向下,以迭代的方法做出相繼的貪心選擇,每做一次貪心選擇就將所求問題簡化為一個規模更小的子問題,通過每一步貪心選擇,可得到問題的一個最優解,雖然每一步上都要保證能獲得局部最優解,但由此產生的全局解有時不一定是最優的,所以貪婪法不要回溯。能夠用貪心算法求解的問題一般具有兩個重要特性:貪心選擇性質和最優子結構性質。

如題:給出一組活動,告訴每個活動的開始時間和結束時間,要求出算出能參加的最多活動的數量或者活動的起止時間

貪心算法思路:

用兩個數組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個活動的起止時間,輸出相容的活動的起止時間


以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开远市| 天峻县| 陈巴尔虎旗| 石狮市| 启东市| 修水县| 盱眙县| 万宁市| 元氏县| 台安县| 布尔津县| 宜兴市| 沙雅县| 南澳县| 衡南县| 开化县| 榕江县| 南和县| 绍兴县| 南丰县| 辽阳县| 长葛市| 蒙自县| 贵阳市| 科技| 黔西| 宣威市| 色达县| 郴州市| 环江| 石棉县| 兴山县| 高平市| 渭南市| 沂南县| 类乌齐县| 嵊州市| 讷河市| 临沭县| 阿城市| 凤台县|