演算法學習 貪心演算法

2021-10-04 03:18:13 字數 1035 閱讀 7873

想通過這篇部落格來分享一下學習貪心演算法和動態規劃的過程

首先什麼是貪心演算法?

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

比如某麵包店有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元面額都不夠買單,那麼小面額的更加不夠了。所以只能選擇從大往小給。。。所以貪心模式也可以稱為敗家模式

演算法學習 貪心演算法

所謂貪心演算法,是在對問題求解時,總是做出在當前看來最好的選擇。即,不從整體最優上加以考慮,它所做出的僅僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,就是某個狀態以前的過程不會影響以後的狀態,只與當前的狀態有關。貪心...

貪心演算法學習

基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須具備...

演算法學習 貪心演算法實踐

完成日期 2017.11.21 1.實踐題目 程式儲存問題 2.問題描述 設有 n 個程式 要存放在長度為 l 的磁帶上。程式i存放在磁帶上的長度是 li 1 i n 要求確定這 n 個程式在磁帶上的乙個儲存方案,使得能夠在磁帶上儲存盡可能多的程式。3.演算法描述 資料結構 count 當前可儲存的...