問題描述: 設有
n個活動的集合
e=,其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活動
i都有乙個要求使用該資源的起始時間
si和乙個結束時間fi,
且si<
fi。如果選擇了活動
i,則它在半開時間區間[si
, fi
)內占用資源。若區間[si
, fi
)與區間[sj
, fj
)不相交,則稱活動
i與活動
j是相容的。也就是說,當
si≥fj
或sj≥fi
時,活動
i與活動
j相容。
例:設待安排的11個活動的開始時間和結束時間按結束時間的非減序排列如下:
演算法greedyselector
的計算過程如圖所示。圖中每行相應於演算法的一次迭代。陰影長條表示的活動是已選入集合a的活動,而空白長條表示的活動是當前正在檢查相容性的活動。
//活動安排問題
#include using namespace std;
template void greedyselector(int n, type s,type f,bool a)
else
}}int main()
for(int i = 1; i <= n; i++)
bool *a = new bool[n];
greedyselector(n,s,f,a);
cout<
貪心演算法之活動安排問題
問題表述 設有n 個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活 i都有乙個要求使用該資源的起始時間 si和乙個結束時間 fi,且 si 如果選擇了活動 i,則它在半開時間區間 si,fi 內占用資源。若區間 si,fi 與區間 sj...
活動安排問題 貪心演算法
問題表述 設有n個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活 i都有乙個要求使用該資源的起始時間 si和乙個結束時間 fi,且 si 如果選擇了活動 i,則它在半開時間區間 si,fi 內占用資源。若區間 si,fi 與區間 sj,...
活動安排問題(貪心演算法)
類似的問題是 選點問題和區間覆蓋問題。活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了乙個簡單 漂亮的方法使得盡可能多的活動能相容地使用公共資源。設有n個活動的集合e 其中每個活動都...