貪心演算法總結

2021-08-09 03:26:00 字數 1409 閱讀 6857

貪心演算法:在求最優解問題的過程中,從問題的初始狀態出發,依據某種貪心標準,直接去求每一步的最優解,通過                   若干次的貪心選擇,最終得出整個問題的最優解。

注意:貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解。

基本思想:通常以自頂向下的方式進行,以迭代的方式作出相繼的貪心選擇,每一次的貪心選擇將所求問題簡化為規模更小的子問題。

一般流程:

//a是問題的輸入集合即候選集合

greedy(a)

;           //初始解集合為空集

while (not solution(s))      //集合s沒有構成問題的乙個解

;a = a-;

}             

}return s;

}(1)候選集合a:問題的最終解均取自於候選集合a。

(2)解集合s:解集合s不斷擴充套件,直到構成滿足問題的完整解。

(3)解決函式solution:檢查解集合s是否構成問題的完整解。

(4)選擇函式select:貪心策略,這是貪心演算法的關鍵。

(5)可行函式feasible:解集合擴充套件後是否滿足約束條件。

經典問題(活動安排問題)

1.問題描述:設有n個活動的集合e=,其中每個活動都要求使用同一資源,而在同一時間內只有乙個活                      動能使用這一資源。每個活動i都有乙個要求使用該資源的起始時間si和乙個結束時間fi,且si<fi。如果                        選擇了活動i,則它在半開時間區間[si ,fi )內占用資源。若區間[si ,fi )與區間[sj,fj )不相交,則稱活動i                      與活動j是相容的。即當 si ≥ fj 或 sj ≥ fi 時,活動i與活動j相容。活動安排問題就是在所給的活動集合中選                      出最大的相容活動子集合。

2.思路:利用貪心演算法,每次總選擇具有最早完成時間的相容活動加入解集合,為未安排的的活動留下盡可能多的時                 間。即使剩餘的可安排時間段極大化,以便安排盡可能多的相容活動。

3.**:

#include

using namespace std;

struct action;

action a[1000];     //活動的集合e記為陣列

//按活動的結束時間公升序排序

bool cmp(const action &a,const action &b)

//形引數組b用來記錄被選中的活動

void greedyselector(int n,action a,bool b)

}for(int i=1;i<=n;i++)

sort(a+1,a+n+1,cmp);

greedyselector(n,a,b);}

總結 貪心演算法 貪心演算法入門總結

英語 greedy algorithm,又稱貪婪演算法,是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有利 的選擇,從而希望導致結果是最好或最優的演算法。比如在旅行推銷員問題中,如果旅行員每次都選擇最近的城市,那這就是一種貪心演算法。貪心演算法在有最優子結構的問題中尤為有效。最優子結構的意思...

貪心演算法總結

第一套題主要用貪心演算法來解決問題,貪心演算法簡單來說就是從區域性最優解,進而求得整體最優解,其中難點就是選擇貪心標準,貪心標準的選擇選的巧妙問題就會變的很簡單,比如第一題搬桌子的題,就是把房間轉化為對應的走廊號,問題就簡化了很多。貪心演算法的題目有的可以很簡單的看出來,常見典型的題有,揹包問題,最...

貪心演算法總結

在求最優解問題的過程中,依據某種貪心標準,從問題的初始狀態出發,直接去求每一步的最優解,通過若干次的貪心選擇,最終得出整個問題的最優解,這種求解方法就是貪心演算法。從貪心演算法的定義可以看出,貪心演算法不是從整體上考慮問題,它所做出的選擇只是在某種意義上的區域性最優解,而由問題自身的特性決定了該題運...