算法導論系列:貪心算法(1)

周末開始著手算法這一系列文章,說起寫這一系列的初衷是發現網上很多的同學們在學習算法這個時候,會遇到很多困難,而學校書中講的道理盡管很對,但是總是太過于晦澀,正確的知識總是晦澀,這點沒錯,但讓晦澀的知識變得有趣豈不是也很有意思?回想起自己學習算法的過程中,遇到了不少的坑坑.特想寫一些文章去記錄下自己過程中的所思說想,也借這些文章自己復習學習一下.

這系列文章主要包括幾個大類的算法,包括貪心算法,分治法,動態規劃,回溯法,分支定界法,線性規劃法等等,具體在這些大類算法內每次會選幾個小例子去加深意識,并且會給出能夠運行的代碼來!這一點看起來很好笑,但是很重要,很多同學在看課本的時候都說算法書上的代碼都不能運行,太討厭了,實際上書上是需要你理解算法而不是理解代碼.但是能夠運行的代碼同樣也有意義,能夠讓人迅速獲得喜悅和自信,當然理解也需要下一些苦功夫.

正文開始:

貪心算法其實本身就跟我們人性一樣,看到眼前的好吃的,拿來拿來別客氣.但是絲毫不顧忌自己還得燃燒卡路里.貪心算法也是這樣.

貪心算法的本質其實就是總是做出當前最好的選擇,也就是說算法總是期望通過局部最優選擇從而得到全局最優的解決方案.

但是大家想想貪心算法其實是很”目光短淺”的,因為僅僅根據當前眼下的信息來做出決策,這樣就不是從整體來最優考慮,他做出的選擇只能是某種意義上的局部最優.但是,貪心算法可以得到很多問題的整體最優解或者近似解,在實際生活中還是有一定的意義的,因此貪心算法還是得到了廣泛的應用.

但是貪心也不是全部都要,貪心的算法也是有一定的原則,經過我們很多的實踐后發現,要想利用貪心算法解決問題,必須要滿足兩個性質:

1:貪心選擇

所謂的貪心選擇其實是說原問題可以分解成一個個的小問題來去求解,小問題的結果合成之后一樣是原問題的結果,這樣保證了每一步都是當前最佳的選擇,并且程序運行中沒有回溯過程.

2:最優子結構

最優子結構其實是說當一個問題的最優解包含其子問題的最優解時,稱此問題擁有最優子結構,問題能否擁有最優子結構其實是可否利用貪心算法的關鍵.

現在我們用一個例子說一下貪心算法:

現在我們有一批貨物,貨物的重量w和價值v都是不固定的,但是我們貨車的運載量是固定的,只有m,但是貨物可以分割,因此怎么樣可以讓運載的貨物價值最大呢?

現在我們有三種思路:

1:揀價值最高的貨物來運輸,肯定賺

2:揀重量最小的貨物來運輸,也不虧

3:選擇性價比(價值/重量)大的貨物來運輸,看起來不錯

這三種方法想想也是第三種合理,第一種的盡管價值最大,但是如果貨物的重量也是非常大,這就不劃算了,如果選重量最小的貨物,如果賣不上價格,豈不也是很虧,因此,每次選擇性價比最高的貨物,不失為一個優秀的選擇.

那讓我們設計一下算法:

1:數據結構及其初始化

我們這次使用結構體的方式,將n種貨物的重量,價值以及性價比存儲在結構體當中,并且使用將其按照性價比的高低來將其排序,

2:貪心策略

根據貪心策略,我們優先選擇性價比高的貨物,并且每次放入后與運載能力m進行比較,求出最大值即可.

現在我們貼出代碼:


在代碼中輸入樣例:

運行結果如下:

下一篇文章我們將說說使用Dijkstra算法解決最短路徑問題,這也是貪心算法的一種,也是挺有意思的,還請多多指教.

參考資料:

1:大話數據結構,清華大學出版社

2:算法導論,機械工業出版社

3:趣學算法,人民郵電出版社

4:算法分析,人民郵電出版社

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容

  • 分治算法 一、基本概念 在計算機科學中,分治法是一種很重要的算法。字面上的解釋是“分而治之”,就是把一個復雜的問題...
    木葉秋聲閱讀 5,311評論 0 3
  • 我沒有細讀過巴黎圣母院,只知道個梗概,突然某一刻,毫無因果緣由,敲鐘人的形象蹦出在腦海,隨之一股濃烈的悲傷猝不及防...
    丟卡閱讀 521評論 0 0