背包問題解析(一)-貪心算法


一、題目:
有N件物品和一個容量為V的背包。第i件物品的重量是w[i],價值是v[i]。求解將哪些物品裝入背包可使這些物品的重量總和不超過背包容量,且價值總和最大。
 
二、解決思路:
本題剛開始的解題的時候,想采取貪心算法來解決,也就是將放入的物品的性價比按照從高到低進行排序,然后優先放優先級高的,其次優先級低的。
 
三、代碼實現(python)
 1 # 重量w=[5,4,3,2]
 2 # 價值v=[6,5,4,3]
 3 b=[]  4 m=int(input("請輸入背包的最大重量:"))  5 n=int(input("請輸入商品的數量:"))  6 for i in range(n):  7 a=input("請分別輸入重量和價值,以空格隔開:")  8 a=a.split(" ")  9 for i in range(len(a)): 10 a[i]=int(a[i]) 11 b.append(a) 12 print("加載初始化:",b) 13 for i in range(len(b)): 14 for j in range(i+1,len(b)): 15 if b[i][1]/b[i][0]<b[j][1]/b[j][0]: 16 b[i],b[j]=b[j],b[i] 17 print("性價比排序:",b) 18 v=0 19 c=[] 20 for i in range(len(b)): 21 if m-b[i][0]>0: 22 m=m-b[i][0] 23 c.append(b[i]) 24 v+=b[i][1] 25 print("放入背包:",c) 26 print("最大價值為:",v)
打印結果:
 
四、算法分析:
貪心選擇是指所求問題的整體最優解可以通過一系列局部最優的選擇,即貪心選擇來達到。這是貪心算法可行的第一個基本要素,也是貪心算法與動態規划算法的主要區別。貪心選擇是采用從頂向下、以迭代的方法做出相繼選擇,每做一次貪心選擇就將所求問題簡化為一個規模更小的子問題。當一個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。一般是一維問題。
很明顯,此算法在背包問題上面解答是錯誤的,放入[[2,3],[3,4],[5,6]]時可達到最高值13

 並沒有找到最優解,推薦的算法為動態背包算法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM