算法學習---貪心算法

想通過這篇博客來分享一下學習貪心算法和動態規劃的過程

首先什麼是貪心算法?

百度百科給出的釋義是:貪心算法(又稱貪婪算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的局部最優解

翻譯成人話就是用簡單粗暴的方式,以最少的代價(佔用的時間和空間),得出結果。

比如某面包店有A、B、C三種大小的麪包,其中A麪包可以提供10點能量售價5元,B麪包可以提供8點能量售價3元,C麪包可以提供2點能量售價1元。現在有一個飢餓的人來到這個麪包店,他需要20點能量值才能喫飽,並且他身上只有10元錢。那麼他要如何選擇麪包?

我們來列舉一下:

A + A = 20點能量

B + B + B = 24點能量

A + C + C + C + C + C = 20點能量值

B + B + C + C = 20點能量

...

像這類問題都有一個特點,那就是解決問題的方法有很多種,那麼我要選哪一種呢?貪心算法給出的答案就是:A+A

因爲它是最快、最簡單的。。。可能這樣說大家不好理解,也可以嘗試另一個理解的方式。

比如我們去超市購物,因爲我們不知道馬上算出自己買的東西價值多少錢,所以我們給收銀員的現金最好是一張100元的RMB。

之所以給100元,是因爲懶。。。因爲你買的這堆東西可能是90元,也可能是40元,亦或者是5元。對應的我們可以選擇給收銀員100元,50元,10元面值的RMB。但這樣做的話。。。我們就很可能遇上自己要多數幾次錢的問題。。。比如你給收銀員10元,但是商品價值40元,那麼會發生什麼?你需要繼續掏錢給收銀員,假設你再給她一張10元的,那麼還是不夠,還要繼續給10元...這樣下去你給錢的操作是不是變多了?那麼買單(運算時間)這個過程是不是就變長了。

那麼假設我們每次都是直接給出我們手裏最大面額的RMB,那麼問題是不是就簡單了?不管這堆商品價值是90元、40元還是5元,我都只需要給一張鈔票就行了,一次解決問題,至於後續的找零問題,跟我有什麼關係?找零不歸顧客管對吧,那是收銀員的工作。這就是貪心算法一個基本原則。用最簡單的方式!

可能又小夥伴會問,假如商品的價值超過100元呢?也很簡單,如果價值超過100元,那麼也是必須先給100元面額的RMB,因爲如果連100元面額都不夠買單,那麼小面額的更加不夠了。所以只能選擇從大往小給。。。所以貪心模式也可以稱爲敗家模式

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章