貪心問題詳解

2021-08-04 20:41:45 字數 1860 閱讀 1406

貪心演算法思想:

顧名思義,貪心演算法總是作出在當前看來最好的選擇。也就是說貪心演算法並不從整體最優考慮,它所作出的選擇只是在某種意義上的區域性最優選擇。當然,希望貪心演算法得到的最終結果也是整體最優的。雖然貪心演算法不能對所有問題都得到整體最優解,但對許多問題它能產生整體最優解。如單源最短路經問題,最小生成樹問題等。在一些情況下,即使貪心演算法不能得到整體最優解,其最終結果卻是最優解的很好近似。

貪心演算法的基本要素:

1.貪心選擇性質。所謂貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優的選擇,即貪心選擇來達到。這是貪心演算法可行的第乙個基本要素,也是貪心演算法與動態規劃演算法的主要區別。

動態規劃演算法通常以自底向上的方式解各子問題,而貪心演算法則通常以自頂向下的方式進行,以迭代的方式作出相繼的貪心選擇,每作一次貪心選擇就將所求問題簡化為規模更小的子問題。

對於乙個具體問題,要確定它是否具有貪心選擇性質,必須證明每一步所作的貪心選擇最終導致問題的整體最優解。

2. 當乙個問題的最優解包含其子問題的最優解時,稱此問題具有最優子結構性質。問題的最優子結構性質是該問題可用動態規劃演算法或貪心演算法求解的關鍵特徵。

貪心演算法的基本思路:

從問題的某乙個初始解出發逐步逼近給定的目標,以盡可能快的地求得更好的解。當達到演算法中的某一步不能再繼續前進時,演算法停止。

該演算法存在問題:

1. 不能保證求得的最後解是最佳的;

2. 不能用來求最大或最小解問題;

3. 只能求滿足某些約束條件的可行解的範圍。

實現該演算法的過程:

從問題的某一初始解出發;

while 能朝給定總目標前進一步 do

求出可行解的乙個解元素;

由所有解元素組合成問題的乙個可行解;

01揹包問題:有乙個揹包,揹包容量是m=30。有3個物品,要求盡可能讓裝入揹包中的物品總價值最大,但不能超過總容量。

我們制定貪心的策略總共有3種: 

1. 每次挑選重量最小的放入揹包 

2. 每次挑選價值最大的放入揹包 

3. 每次挑菜單位重量價值最大的放入揹包

我們試著來證明這三種可行: 

第一種: 

物品:a b c 

重量 10 30 10 

價值 20 80 20

每次挑選重量最小,ac放入揹包後,b就不能放入揹包了,放入ac的價值為40,而選擇放入b的價值為80,明顯不成立

第二種:和第一種類似

第三種: 

物品:a b c 

重量 10 30 10 

價值 10 30 10 

每次挑菜單位重量價值最大,abc的單位重量價值都一樣,無法選擇,因此也不成立。

總結: 

證明了,01揹包問題是不能使用貪心演算法來解決的,而是應該使用動態規劃——動態規劃 01揹包問題

但是如果加乙個條件,物品是可以拆分的,那麼此揹包問題就可以用貪心演算法來解決,因此可以拆分,使得揹包空間得到充分利用

#include

#include

using

namespace

std;

const

int maxn = 100;

//事先按照單位重量的商品價值排序了

float weight[maxn] = ;//商品重量

float value[maxn] = ; //商品價值

float x[maxn];//儲存能存放物品的比例

int n = 4;

float m;

void bag()

x[i] = 1;

m -= weight[i];

}if(i < n)

}int main()

}

在這裡,我使用的是第三種策略。

演算法初步 貪心 基本貪心問題詳解

1 區間不相交問題 描述 給出n個開區間 x,y 從中選擇盡可能多的開區間,使得這些開區間兩兩沒有交集。如給出區間 1,3 2,4 3,5 6,7 貪心策略 很容易想到,如果我們想讓n個區間中的子區間越多越好,那麼肯定子區間的長度越短越好,這樣才能有更大的剩餘空間留給其它空間,如果乙個區間就佔了 1...

貪心演算法 最大整數問題詳解

貪心演算法 最大整數問題詳解 最大整數 設有n個正整數,將它們連線成一排,組成乙個最大的多位整數。例如 n 3時,3個整數13,312,343,連成的最大整數為34331213。又如 n 4時,4個整數7,13,4,246,連成的最大整數為7424613。輸入 n n個數輸出 連成的多位數 演算法分...

貪心演算法詳解

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