數(shù)據(jù)結(jié)構(gòu)與算法Day30----貪心算法

一口锭、貪心算法:

1曲楚、概念:

??每一步選擇中都采取在當(dāng)前狀態(tài)下最好或最優(yōu)(即最有利)的選擇厘唾,從而希望導(dǎo)致結(jié)果是最好或最優(yōu)的算法。

2龙誊、貪心算法解決問題的思路抚垃,并不一定能給出最優(yōu)解:

??在一個有權(quán)圖中,從頂點S開始趟大,找一條到頂點T的最短路徑(路徑中邊的權(quán)值和最泻资鳌)。貪心算法的解決思路是逊朽,每次都選擇一條跟當(dāng)前頂點相連的權(quán)最小的邊罕伯,直到找到頂點T。按照這種思路叽讳,求出的最短路徑是S->A->E->T追他,路徑長度是1+4+4=9。這種貪心的選擇方式岛蚤,最終求的路徑并不是最短路徑邑狸,因為路徑S->B->D->T才是最短路徑,因為這條路徑的長度是2+2+2=6涤妒。


??在這個問題上单雾,貪心算法不工作的主要原因是,前面的選擇會影響后面的選擇届腐。如果第一步從頂點S走到頂點A铁坎,那接下來面對的頂點和邊,跟第一步從頂點S走到頂點B犁苏,是完全不同的硬萍。所以,即便第一步選擇最優(yōu)的走法(邊最短)围详,但有可能因為這一步選擇朴乖,導(dǎo)致后面每一步的選擇都很糟糕,最終也就無緣全局最優(yōu)解了助赞。

二买羞、實戰(zhàn)分析:

1、分糖果:

??有m個糖果和n個孩子”⑹常現(xiàn)在要把糖果分給這些孩子吃畜普,但是糖果少,孩子多(m<n)群叶,所以糖果只能分配給一部分孩子吃挑。每個糖果的大小不等钝荡,這m個糖果的大小分別是s_1s_2舶衬,s_3,……,s_m埠通。除此之外,每個孩子對糖果大小的需求也是不一樣的逛犹,只有糖果的大小大于等于孩子的對糖果大小的需求的時候端辱,孩子才得到滿足。假設(shè)這n個孩子對糖果大小的需求分別是g_1虽画,g_2舞蔽, g_3, ……狸捕, g_n喷鸽。問題是,如何分配糖果灸拍,能盡可能滿足最多數(shù)量的孩子做祝?


??把這個問題抽象成,從n個孩子中鸡岗,抽取一部分孩子分配糖果混槐,讓滿足的孩子的個數(shù)(期望值)是最大的。這個問題的限制值就是糖果個數(shù)m轩性。
??對于一個孩子來說声登,如果小的糖果可以滿足,就沒必要用更大的糖果揣苏,這樣更大的就可以留給其他對糖果大小需求更大的孩子悯嗓。另一方面,對糖果大小需求小的孩子更容易被滿足卸察,所以脯厨,可以從需求小的孩子開始分配糖果。因為滿足一個需求大的孩子跟滿足一個需求小的孩子坑质,對期望值的貢獻是一樣的合武。每次從剩下的孩子中,找出對糖果大小需求最小的涡扼,然后發(fā)給他剩下的糖果中能滿足他的最小的糖果稼跳,這樣得到的分配方案,也就是滿足的孩子個數(shù)最多的方案吃沪。

2汤善、錢幣找零:

??假設(shè)有1元2元5元红淡、 10元卸伞、 20元50元锉屈、100元這些面額的紙幣,它們的張數(shù)分別是c_1垮耳、c_2颈渊、c_5c_10终佛、c_20俊嗽、c_50c_100×逭茫現(xiàn)在要用這些錢來支付K元绍豁,最少要用多少張紙幣呢?


??先用面值最大的來支付牙捉,如果不夠竹揍,就繼續(xù)用更小一點面值的,以此類推邪铲,最后剩下的用1元來補齊芬位。

3、區(qū)間覆蓋:

??假設(shè)有n個區(qū)間带到,區(qū)間的起始端點和結(jié)束端點分別是[l_1, r_1]昧碉,[l_2, r_2][l_3, r_3]揽惹, …[l_n, r_n]被饿。從這n個區(qū)間中選出一部分區(qū)間,這部分區(qū)間滿足兩兩不相交(端點相交的情況不算相交)搪搏,最多能選出多少個區(qū)間呢狭握?


??假設(shè)這n個區(qū)間中最左端點是l_{min},最右端點是r_{max}慕嚷。這個問題就相當(dāng)于選擇幾個不相交的區(qū)間哥牍,從左到右將[l_{min},r_{max}]覆蓋上。按照起始端點從小到大的順序?qū)@n個區(qū)間排序喝检,每次選擇的時候嗅辣,左端點跟前面的已經(jīng)覆蓋的區(qū)間不重合的,右端點又盡量小的挠说,這樣可以讓剩下的未覆蓋區(qū)間盡可能的大澡谭,就可以放置更多的區(qū)間。這實際上就是一種貪心的選擇方法。

4蛙奖、Huffman編碼:

??假設(shè)有一個包含1000個字符的文件潘酗,節(jié)省空間的存儲方式怎么存儲?


??假設(shè)這6個字符出現(xiàn)的頻率從高到低依次是a雁仲、 b仔夺、 c、 d攒砖、 e缸兔、 f。把它們編碼下面這個樣子吹艇,任何一個字符的編碼都不是另一個的前綴惰蜜,在解壓縮的時候,每次會讀取盡可能長的可解壓的二進制串受神,所以在解壓縮的時候也不會歧義抛猖。



??把每個字符看作一個節(jié)點,并且輔帶著把頻率放到優(yōu)先級隊列中鼻听。從隊列中取出頻率最小的兩個節(jié)點A财著、 B,然后新建一個節(jié)點C精算,把頻率設(shè)置為兩個節(jié)點的頻率之和瓢宦,并把這個新節(jié)點C作為節(jié)點A、 B的父節(jié)點灰羽。最后再把C節(jié)點放入到優(yōu)先級隊列中驮履。重復(fù)這個過程,直到隊列中沒有數(shù)據(jù)廉嚼。



給每一條邊加上畫一個權(quán)值玫镐,指向左子節(jié)點的邊我們統(tǒng)統(tǒng)標(biāo)記為0,指向右子節(jié)點的邊怠噪,我們統(tǒng)統(tǒng)標(biāo)記為1恐似,那從根節(jié)點到葉節(jié)點的路徑就是葉節(jié)點對應(yīng)字符的霍夫曼編碼為:
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市傍念,隨后出現(xiàn)的幾起案子矫夷,更是在濱河造成了極大的恐慌,老刑警劉巖憋槐,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件双藕,死亡現(xiàn)場離奇詭異,居然都是意外死亡阳仔,警方通過查閱死者的電腦和手機忧陪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嘶摊,你說我怎么就攤上這事延蟹。” “怎么了叶堆?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵阱飘,是天一觀的道長。 經(jīng)常有香客問我虱颗,道長俯萌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任上枕,我火速辦了婚禮,結(jié)果婚禮上弱恒,老公的妹妹穿的比我還像新娘辨萍。我一直安慰自己,他們只是感情好返弹,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布锈玉。 她就那樣靜靜地躺著,像睡著了一般义起。 火紅的嫁衣襯著肌膚如雪拉背。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天默终,我揣著相機與錄音椅棺,去河邊找鬼。 笑死齐蔽,一個胖子當(dāng)著我的面吹牛两疚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播含滴,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼诱渤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谈况?” 一聲冷哼從身側(cè)響起勺美,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碑韵,沒想到半個月后赡茸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡泼诱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年坛掠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡屉栓,死狀恐怖舷蒲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情友多,我是刑警寧澤牲平,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站域滥,受9級特大地震影響纵柿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜启绰,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一昂儒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧委可,春花似錦渊跋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卡者,卻和暖如春蒿囤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崇决。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工材诽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恒傻。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓岳守,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碌冶。 傳聞我的和親對象是個殘疾皇子湿痢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 概述 貪心算法(英語:greedy algorithm),又稱貪婪算法扑庞,是一種在每一步選擇中都采取在當(dāng)前狀態(tài)下最好...
    jiaji_3740閱讀 3,865評論 0 1
  • 貪心算法解決問題的步驟 當(dāng)我們看到這類問題的時候譬重,首先要聯(lián)想到貪心算法:針對一組數(shù)據(jù),我們定義了它的限制值和期望值...
    wean_a23e閱讀 859評論 1 0
  • 貪心算法解決問題的步驟 第一步罐氨,當(dāng)我們看到這類問題的時候臀规,首先要聯(lián)想到貪心算法:針對一組數(shù)據(jù),我們定義了限制值和期...
    liyoucheng2014閱讀 1,308評論 0 2
  • 1)這本書為什么值得看: Python語言描述栅隐,如果學(xué)的Python用這本書學(xué)數(shù)據(jù)結(jié)構(gòu)更合適 2016年出版塔嬉,內(nèi)容...
    孫懷闊閱讀 12,479評論 0 15
  • 焦點網(wǎng)絡(luò)班第一期 鄭州何琴 堅持分享第743天 今天和分別半年多的朋友見面玩徊。感覺很是開心,她帶著兒子到社區(qū)心理...
    依然化蝶閱讀 175評論 0 0