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