08-贪婪算法
數(shù)據(jù)結(jié)構(gòu)和算法
基于《算法圖解》—Aditya Bhargava 和《數(shù)據(jù)結(jié)構(gòu)》—嚴(yán)蔚敏
第8章 貪婪算法
貪婪算法的優(yōu)點(diǎn): 簡(jiǎn)單易行,讓每一步都選擇局部最優(yōu)解,最終得到的就是全局最優(yōu)解。
貪婪算法是近似算法:在獲得精確解需要的時(shí)間太長(zhǎng)時(shí),可以使用近似算法。
判斷近似算法優(yōu)劣的標(biāo)準(zhǔn)如下:
- 速度有多塊。
- 得到的近似解與最優(yōu)解的接近程度。
8.1 集合覆蓋問(wèn)題
例如解決經(jīng)典的集合覆蓋問(wèn)題——選擇最優(yōu)的廣播電臺(tái):
假設(shè)辦了個(gè)廣播節(jié)目,要讓全美50個(gè)州的聽(tīng)眾都收聽(tīng)得到。為此,需要決定在哪些廣播臺(tái)播出。在每個(gè)廣播臺(tái)播出都需要支付費(fèi)用,因此,要盡可能少的廣播臺(tái)播出。
8.2 NP完全問(wèn)題
Non-deterministic Polynomial的問(wèn)題,即多項(xiàng)式復(fù)雜程度的非確定性問(wèn)題。
判斷NP完全問(wèn)題的方法:
- 元素較少時(shí)算法的運(yùn)行速度非常快,但隨著元素?cái)?shù)量的增加,速度會(huì)變得非常慢。
- 涉及“所有組合”的問(wèn)題通常是NP完全問(wèn)題。
- 不能將問(wèn)題分成小問(wèn)題,必須考慮各種可能的情況。
- 如果問(wèn)題涉及序列且難以解決(如旅行商問(wèn)題中的城市序列)。
- 如果問(wèn)題涉及集合且難以解決(如廣播臺(tái)集合)。
- 如果問(wèn)題可轉(zhuǎn)換為集合覆蓋問(wèn)題或者旅行商問(wèn)題,就肯定是NP問(wèn)題。
8.3 小結(jié)
- 貪婪算法尋找局部最優(yōu)解,企圖以這種方式來(lái)獲得全局最優(yōu)解。
- 對(duì)于NP完全問(wèn)題,還沒(méi)有找到快速解決方案。
- 面臨NP完全問(wèn)題時(shí),最佳的做法是適用近似算法。
- 貪婪算法易于實(shí)現(xiàn)、運(yùn)行速度快,是不錯(cuò)的近似算法。
——持續(xù)修改完善中…
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 07-狄克斯特拉算法
- 下一篇: 第1章 绪论