貪心法 活動安排問題

2021-10-10 08:46:41 字數 1789 閱讀 2015

貪心法的本質可以認為是動態規劃在特定條件下的優化。貪心法滿足兩個性質,最優子結構性質和貪心選擇性質。

滿足最優子結構性質意味著問題可以被層層分解為子問題,這些子問題構成樹狀結構,意味著貪心演算法可以求解的問題可以使用動態規劃演算法求解。對應到樹狀結構的話,就是從底向上求解,需要預先求出所有子問題的解以期求出父問題的解,這就意味著要遍歷所有的從葉節點到根節點的路徑。

貪心選擇性質是指所求問題的整體最優解可以通過一系列區域性最優的貪心選擇來達到。滿足貪心選擇性質,意味著對於每個內節點處,選擇哪個孩子節點將會有明確的統一的模式(比如全部取最大的,這種方法通常是只顧眼前的),每作一次貪心選擇就將所求問題簡化為規模更小的子問題,同時該選擇將成為最終解的一部分。這樣依據這種模式,只需要從上到下按此模式從根節點開始求解出到葉節點的一條路徑,這條路徑就被保證為最優解,如此將簡化動態規劃的複雜度。

使用貪心法需要證明其貪心選擇性質。貪心選擇性質對應於數學歸納法的k+1步推導為k步,可以表示如下:

k+1 —(t)—> k

其中k+1為父問題的最優解;t為貪心選擇,即某種減小子問題的模式,每次貪心選擇會產生最終解的一部分(這種模式一般會將原問題減去貪心選擇生成子問題,這樣當子問題最小時所有的貪心選擇剛好構成了原問題,這一點由最優子結構說明);k為子問題的最優解,是k+1經過t後減小成為的問題,假如證明了k還是最優解,那麼就可以繼續推證k-1,k-2…一直到1都可以通過同樣的貪心選擇迭代得到。因此求原問題的最優解就成為初始條件,假如滿足貪心選擇性質就可以一路迭代下去,迭代到最小問題時剛好一路的貪心選擇可以組成最優解。

問題:

有n個活動申請使用同乙個禮堂,每項活動有乙個開始時間和乙個截止時間,如果任何兩個活動不能同時舉行,問如何選擇這些活動,從而使得被安排的活動數量達到最多?

設s=為活動的集合,si和fi分別為活動i的開始和截止時間,i=1, 2, …, n。定義活動i與j相容:si ≥ fj或sj ≥fi, i≠j求s最大的兩兩相容的活動子集。

問題分析:

先按照結束時間非降序排序。

貪心選擇:每次選擇結束時間最早的可選活動。

構造父子問題:父問題a為待選活動集合中的最優安排,子問題a』為比a中結束時間最早的可選活動結束的晚或相同的活動集合中的最優安排。

證明其貪心選擇性質:首先證明a為所有活動集合的最優安排時,a』為結束時間不早於第乙個活動的所有活動的集合的最優安排,就是數學歸納法的初始條件。為此需證明兩點:1.a經過貪心選擇會生成a』,這一點只需證明第乙個活動在a內即可,此處易證;2.a最優,那麼a』也最優,這一點根據最優子結構性質證明。接著證明a為已經選了部分活動後剩下的活動集合的最優安排,a』為結束時間不早於a中第乙個活動的活動集合的最優安排,同樣類似的方法證明兩點即可。

**:

#includeusing namespace std;

#define maxn 105

struct activity

};bool cmp(activity x,activity y)

// 貪心法求解最大相容活動集合

// 輸入:排序完成的活動安排集合a,活動數量n,結果記錄陣列a

void greedyselector(activity a, int n,int a)else

}}int main(),,,,,,,,,,};

sort(a,a+n,cmp);

greedyselector(a, n, a);

for(int i = 0;i < n;i++){

if(a[i])

cout<複雜度:

空間:o(n)

貪心法解活動安排問題

問題 設有n個活動的集合e 按其結束時間排序 其中每個活動都要使用同乙個場所,而在同一時間內只有1個活動能使用該場所。每個活動i的開始時間和結束時間分別為begin i 和finish i 求e的最大相容子集合。解析 先選擇活動1,活動1具有最早的完成時間。下面證明該問題具有貪心選擇性質,即該問題有...

HDU 2037 活動安排 貪心法

問題 簡單來說就是有個節目表有起始時間和結束時間.要你在一天內盡可能多的完整看節目.分析 典型貪心法解.這次貪得是結束時間.意思就是讓這一天中剩下的時間盡可能多.所以讓結束時間盡可能的早 剩下就是些判斷起始時間是否比看完上個節目晚就行了.用這道題練了練排序函式 結構體使用.寫的比較繁瑣.見諒。inc...

會場安排問題(貪心法)

假設要在足夠多的會場裡安排一批活動,並希望使用盡可能少的會場。設計乙個有效的貪心演算法進行安排 這個問題實際上是著名的圖著色問題。若將每乙個活動作為圖的乙個頂點,不相容活動間用邊相連。使相鄰頂點著有不同顏色的最小著色數,相應於要找的最小會場數 為了能夠更加生動說明問題的整個過程,所以換乙個類似的描述...