【贪心算法】-背包问题
🚀貪心算法-背包問題
貪心算是把一個復雜問題分解為一系列較為簡單的局部最優選擇,每一步的選擇都是對當前解得一個擴展,直到的到問題的完整解,貪心法的典型應用是求解最優化問題,而且對于許多問題都能得到整體最優解,即使不能得到最優解,通常也是最優解的近似。——《算法設計與分析》
我對貪心法的理解:說到貪心法,和動態規劃有許多相同的地方,比如都是求最優解的算法,但是動態規劃是通過找到動態規劃方程,通過動態規劃方程一步步推出最優解,而且一般都是最優解,每次決策和上一次決策有關系,具有很明確的求解目的;貪心法是通過用一個局部最優的策略去求整體最優,需要明確的是局部最優不一定推出整體最優,所以貪心法求出的整體解可能不是最優解,相對動態規劃的復雜,如果問題對最優解不是很嚴格,可以接受近似解,貪心法不為是一種折中的選擇。
1??題目
給定n個物品和一個容量為cap的背包,物品i的重量為wi,價值為vi的背包問題(不是o/1背包,物品可以被拆分放入)
具體題目:
有三個物品,物品重量和價值分別為{20,30,10},{60,120,50},背包的容量為50,求出放入背包物品的最大價值。
2??思路
對于求放入背包物品的最大價值是多少,根據最優策略的不同,得到的結果也不盡相同,按照常理,一般我們會選擇單位重量價值大的物品先放入背包,當然還有以價值最大優先,以重量最小優先,這里以單位重量價值大優先。
算法部分getMaxValue需要注意的
求性價比排序后,如何使物品的重量價值和性價比對應起來。
最粗暴的方式使,自己手動寫一個多維排序,性價比排序的同時,也讓物品的重量和價值排序,通過索引對應起來。
簡單方式,通過用一個二維數組把性價比和重量存一起,然后通過Arrays.sort()的自定義二維數組排序,對性價比進行排序,這樣就實現了對應,至于價值可以通過性價比和重量推出來。
物品不能整個放入背包,劃分后再放入
3??代碼
輸入及輸出
請輸入背包容量和物品個數
50 3
請輸入背包重量和價值(空格隔開):
20 60 30 120 10 50
放入背包的最大價值是:200
總結
以上是生活随笔為你收集整理的【贪心算法】-背包问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 名帖86 蔡襄 行楷《谢赐御书诗表》
- 下一篇: oracle mysql迁移方案_Ora