貪心算法

貪心算法解決問題的步驟

第一步,當我們看到這類問題的時候束倍,首先要聯(lián)想到貪心算法:針對一組數(shù)據(jù),我們定義了限制值和期望值茶没,希望從中選出幾個數(shù)據(jù)肌幽,在滿足限制值的情況下,期滿值最大抓半。
第二步谎懦,我們嘗試看下這個問題是否可以用貪心算法解決:每次選擇當前情況下脯倒,在對限制值等同貢獻值的情況下,對期望值貢獻最大的數(shù)據(jù)剩晴。
第三步,我們舉個例子看下貪心算法產(chǎn)生的結(jié)果是否最優(yōu)的特占。

貪心算法實戰(zhàn)分析

  1. 分糖果
    我們有m個糖果盒n個孩子。我們現(xiàn)在要把糖果分給這些孩子吃,但是糖果少懂诗,孩子多(m<n),所以糖果只能分配給一部分孩子苗膝。如何分配糖果殃恒,能盡可能滿足最多數(shù)量的孩子?
    解答:我們每次從剩下的孩子中辱揭,找出對糖果大小需求最小的离唐,然后發(fā)給他剩下的糖果中能滿足他的最小的糖果。

  2. 錢幣找零
    假設(shè)我們有1元问窃、2元亥鬓、5元、10元域庇、20元嵌戈、50元、100元這些面額的紙幣听皿,它們的張數(shù)分別是c1熟呛、c2、c5写穴、c10惰拱、c20、c50啊送、c100偿短。我們現(xiàn)在要用這些錢來支付K元,最少要用多少張紙幣馋没?
    解答:在貢獻相同期望值(紙幣數(shù)目)的情況下昔逗,我們希望多貢獻點金額,這樣就可以讓紙幣數(shù)更少篷朵。

  3. 區(qū)間覆蓋
    假設(shè)我們有n個區(qū)別勾怒,區(qū)間的起始端點和結(jié)束端點分別是[l1,r1]声旺,[l2笔链,r2],[l3腮猖,r3]鉴扫,.....,[ln澈缺,rn]坪创。我們從這n個區(qū)間中選出一部分區(qū)間炕婶,這部分區(qū)間滿足兩兩不相交(端點相交的情況不算相交),最多能選出多少個區(qū)間呢莱预?
    解答:我們假設(shè)這n個區(qū)區(qū)間中最左端點是lmin柠掂,最右端點是rmax。這個問題就相當于依沮,我們選擇幾個不相交的區(qū)間涯贞,從左到右將[lmin,rmax]覆蓋上悉抵。我們按照起始端點從小到大的順序?qū)@n個區(qū)間排序肩狂。
    我們每次選擇的時候,左端點跟前面的已經(jīng)覆蓋的區(qū)間不重合的姥饰,右端點又盡量小,這樣可以讓剩下的未覆蓋區(qū)間盡可能的大孝治,就可以放置更多的區(qū)間列粪。

  4. 如何用貪心算法實現(xiàn)Huffman壓縮編碼?
    試圖用這種不等長的編碼方法谈飒,來進一步增加壓縮的效率岂座。
    轉(zhuǎn)化為:如何給不同頻率的字符選擇不同長度的編碼呢?
    解答:我們可以把出現(xiàn)頻率比較多的字符杭措,用稍微短一些的編碼费什;出現(xiàn)頻率比較少的字符,用稍微長一些的編碼手素。
    通過優(yōu)先級隊列實現(xiàn)(存放頻率)

  5. 在一個非負整數(shù)a中鸳址,我們希望從中移除k個數(shù)字,讓剩下的數(shù)字值最小泉懦,如何選擇移除哪k個數(shù)字呢稿黍?
    解答:由最高位開始,比較低一位數(shù)字崩哩,如高位大巡球,移除,若高位小邓嘹,則向右移一位繼續(xù)比較兩個數(shù)字酣栈,直到高位大于低位則移除,循環(huán)k次汹押。

  6. 假設(shè)有n個人等待被服務(wù)矿筝,但是服務(wù)窗口只有一個,每個人需要被服務(wù)的時間長度是不同的鲸阻,如何安排被服務(wù)的先后順序跋涣,才能讓這n個人總的等待時間最短缨睡?
    解答:由等待時間最短的開始服務(wù)

經(jīng)典應(yīng)用

  • 霍夫曼編碼(Huffman Coding)
  • Prim和Kruskal最小生成樹算法
  • Dijkstra單源最短路徑算法。

37 | 貪心算法:如何用貪心算法實現(xiàn)Huffman壓縮編碼陈辱?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奖年,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沛贪,更是在濱河造成了極大的恐慌陋守,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件利赋,死亡現(xiàn)場離奇詭異水评,居然都是意外死亡,警方通過查閱死者的電腦和手機媚送,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門中燥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人塘偎,你說我怎么就攤上這事疗涉。” “怎么了吟秩?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵咱扣,是天一觀的道長。 經(jīng)常有香客問我涵防,道長闹伪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任壮池,我火速辦了婚禮偏瓤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘火窒。我一直安慰自己硼补,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布熏矿。 她就那樣靜靜地躺著已骇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪票编。 梳的紋絲不亂的頭發(fā)上褪储,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音慧域,去河邊找鬼鲤竹。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的辛藻。 我是一名探鬼主播碘橘,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吱肌!你這毒婦竟也來了痘拆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤氮墨,失蹤者是張志新(化名)和其女友劉穎纺蛆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體规揪,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡桥氏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了猛铅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片字支。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奸忽,靈堂內(nèi)的尸體忽然破棺而出祥款,到底是詐尸還是另有隱情,我是刑警寧澤月杉,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站抠艾,受9級特大地震影響苛萎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜检号,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一腌歉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧齐苛,春花似錦翘盖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至玛痊,卻和暖如春汰瘫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擂煞。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工混弥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人对省。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓蝗拿,卻偏偏與公主長得像晾捏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哀托,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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