演算法學習 貪心演算法

2021-08-19 22:11:06 字數 908 閱讀 4240

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

貪心策略在解決問題時目光短淺,僅僅依據當前已有的資訊就做出選擇,並且無論將來的結果如何,都不會做出改變。一句話就是:不求最優,僅僅是每一步的最優解。

判斷乙個問題能否用貪心演算法解主要依據:貪心選擇性質最優子結構性質

貪心選擇性質:所求問題的整體最優解可以通過一系列區域性最優的選擇來獲得,即通過一系列的逐步區域性最優選擇來使得最終的選擇方案是全域性最優的。要確定是否具有貪心選擇性質,必須證明每做一步貪心選擇是否最終導致問題的整體最優解。(這是和動態規劃法的最主要的差別)

最優子結構性質:乙個問題的整體最優解,包含的子問題的解也是最優的。

動態規劃演算法通常以自底向上的方式解各子問題,是遞迴過程。

貪心演算法則通常以自頂向下的方式,以迭代的方式做出相繼的貪心選擇,每做一次貪心選擇就將所求問題簡化為規模更小的子問題。

ps:遞迴和迭代:遞迴就是自己呼叫自己的過程,迭代就是利用變數的原值推出變數的新值的過程。如果遞迴是自己呼叫自己的話,那麼迭代就是a不停的呼叫b。

以二叉樹遍歷為例:

貪心法是從上到下僅僅進行深度搜尋。也就是說它從根節點一口氣走到黑,代價取決於子問題的數目,也就是樹的高度,每次在當前問題的狀態上做出的選擇都是1,不進行廣度搜尋。所以最終得出的解不一定是最優解,有可能是近似最優解。

動態規劃演算法是在最優子結構的前提下,從樹的葉子節點開始向上進行搜尋,而且每一步都依據葉子節點當前子問題的狀況做出選擇,從而做出最優決策。所以他的代價是子問題的個數和可選擇的數目。它求出的解一定是最優解。

演算法學習 貪心演算法

想通過這篇部落格來分享一下學習貪心演算法和動態規劃的過程 首先什麼是貪心演算法?翻譯 話就是用簡單粗暴的方式,以最少的代價 占用的時間和空間 得出結果。比如某麵包店有a b c三種大小的麵包,其中a麵包可以提供10點能量售價5元,b麵包可以提供8點能量售價3元,c麵包可以提供2點能量售價1元。現在有...

貪心演算法學習

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

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

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