【算法】貪心算法(0-1背包問題)

什么是貪心算法虑啤?

貪心算法并不是一個具體的算法,而是一種算法的思想睬塌,或者說是解決問題一種思路灾梦。這就有兩個關(guān)鍵的點,可以解釋貪心算法:

  1. 貪心算法解決什么問題?
  2. 貪心算法是怎樣的一種思路?

1. 貪心算法解決什么問題

解決求最優(yōu)解問題。即此問題的最終的目的邪码,是為了得到一個最優(yōu)解。比如咬清,從A地到B地之間的最短路徑闭专,100塊錢可以在一個商場里買到的東西最多,等等之類的旧烧。

2. 貪心算法是怎樣的一種思路

顧名思義影钉,貪心算法,是一種很“貪”的算法掘剪。它的整體步驟平委,可以歸納為:

  1. 將問題分解成多個小問題或者多個步驟。
  2. 在每個小問題或者步驟中夺谁,執(zhí)行某種最優(yōu)化策略廉赔,得到局部最優(yōu)解
  3. 所有每個步驟得到的最優(yōu)化解,組合得到全局最優(yōu)化解匾鸥,不回溯處理

貪心算法最大的特點蜡塌,就是在每一步中取最優(yōu)化的解,不會回溯處理勿负。這樣的策略馏艾,自然在執(zhí)行速度上更快,但是因為這種方法的短視。會導致得的解并不是真正的全局最優(yōu)解琅摩,但是貪心算法得到的依然是一個近似最優(yōu)解铁孵。

0-1背包問題

問題可以描述為:給定一組物品,每種物品都有自己的重量和價格房资,在限定的總重量內(nèi)蜕劝,我們?nèi)绾芜x擇,才能使得物品的總價格最高志膀。

通俗解釋:假如你有一個只能承重100的背包熙宇,你往里面裝一些重量和價值不等的東西鳖擒,怎樣才可以讓你的背包中的價值最大溉浙。

這個問題中就是關(guān)鍵在于,每個轉(zhuǎn)入背包的東西蒋荚,只能是被裝入背包和不被裝入背包兩種狀態(tài)戳稽,可以用0-1表示。所以叫0-1背包問題期升。其二惊奇,就是這個問題的兩個限定。第一播赁,背包的邊界是明確颂郎,它只能承重那么多東西。第二容为,東西的邊界是明確的乓序,你只有那么一些東西可以選擇。

故而坎背,這個問題其實有三種策略可以選擇:

  1. 每次裝入的都是價值和重量比率最高的替劈,也就是我們常說的性價比最高的
  2. 每次裝入的是當前可選擇的東西中,價值最高的
  3. 每次裝入的是當前可選擇東西中得滤,重量最輕的

這三種策略中陨献,策略一看起來最好的策略。但是懂更,策略一的模糊化太大眨业,需要根據(jù)特殊的情況,做出特殊的改變沮协。

策略二和策略三相同龄捡,本身上并沒有太多不同。只是二者的視角不同皂股。

我基于第三種策略墅茉,給出python的實現(xiàn)。(人生苦短,我用python就斤『纺迹看不慣來打我呀~~)

#-*-coding:utf-8-*-
#0-1背包問題的實現(xiàn)

class Good:

    def __init__(self, weight, value, status):
        self.weight = weight
        self.value = value
        self.status = status   # 0未選中,1已選中


#@param goods 物品的集合
#@param total 背包的空閑重量
def greed(goods, total):
    result = []

    while True:
        s=strategy(goods,total)
        if s == -1:
            break;
        result.append(goods[s].weight)
        total = total - goods[s].weight
        goods[s].status = 1

    return result

#策略
def strategy(goods,total):
    index = -1
    minWeight = goods[0].weight
    for i in range(0, len(goods)):
        currentGood = goods[i]
        if currentGood.status == 0 and currentGood.weight <= total and currentGood.weight <= minWeight :
            index = i
            minWeight = goods[index].weight

    return index
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洋机,一起剝皮案震驚了整個濱河市坠宴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绷旗,老刑警劉巖喜鼓,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異衔肢,居然都是意外死亡庄岖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門角骤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隅忿,“玉大人,你說我怎么就攤上這事邦尊”惩” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵蝉揍,是天一觀的道長链峭。 經(jīng)常有香客問我,道長又沾,這世上最難降的妖魔是什么弊仪? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮捍掺,結(jié)果婚禮上撼短,老公的妹妹穿的比我還像新娘。我一直安慰自己挺勿,他們只是感情好曲横,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著不瓶,像睡著了一般禾嫉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚊丐,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天熙参,我揣著相機與錄音,去河邊找鬼麦备。 笑死孽椰,一個胖子當著我的面吹牛昭娩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黍匾,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼栏渺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锐涯?” 一聲冷哼從身側(cè)響起磕诊,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纹腌,沒想到半個月后霎终,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡升薯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年莱褒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片覆劈。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡保礼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出责语,到底是詐尸還是另有隱情,我是刑警寧澤目派,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布坤候,位于F島的核電站,受9級特大地震影響企蹭,放射性物質(zhì)發(fā)生泄漏白筹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一谅摄、第九天 我趴在偏房一處隱蔽的房頂上張望徒河。 院中可真熱鬧,春花似錦送漠、人聲如沸顽照。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽代兵。三九已至,卻和暖如春爷狈,著一層夾襖步出監(jiān)牢的瞬間植影,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工涎永, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留思币,地道東北人鹿响。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像谷饿,于是被迫代替她去往敵國和親抢野。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 可用貪心算法解決的幾個基本問題 關(guān)鍵:看問題有沒有貪心選擇性質(zhì)和最優(yōu)子結(jié)構(gòu)性質(zhì)各墨。有些問題看似是可以用貪心算法指孤,但是...
    碧影江白閱讀 6,185評論 1 2
  • 五大常用算法之一:分治算法 基本概念: 把一個復雜的問題分成兩個或更多的相同的或相似的子問題。再把子問題分成更小的...
    親愛的破小孩閱讀 4,859評論 0 1
  • 操作系統(tǒng) 線程和進程的區(qū)別(1)地址空間:進程內(nèi)的一個執(zhí)行單元;進程至少有一個線程;它們共享進程的地址空間;而進程...
    Stephen__Li閱讀 591評論 0 1
  • 貪心算法 貪心算法總是作出在當前看來最好的選擇贬堵。也就是說貪心算法并不從整體最優(yōu)考慮恃轩,它所作出的選擇只是在某種意義上...
    fredal閱讀 9,207評論 3 52
  • 讀《薛侃錄》,心竊思黎做,古代白話文也叉跛,原文知其意,越讀越歡喜蒸殿。 出入無時筷厘,莫知其鄉(xiāng)。侃問:“持志如心痛宏所,一心在痛上酥艳,...
    大漠駝鈴ok閱讀 1,934評論 0 2