活動安排問題 貪心演算法

2021-07-09 05:46:36 字數 1252 閱讀 3239

活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了乙個簡單、漂亮的方法使得盡可能多的活動能相容地使用公共資源。

設有n個活動的集合e=,其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。

每個活動i都有乙個要求使用該資源的起始時間si和乙個結束時間fi,且si

template

void greedyselector(int n, type s, type f, bool a)

else

a[i]=false;

}}

由於輸入的活動以其完成時間的非減序排列,所以演算法greedyselector每次總是選擇具有最早完成時間的相容活動加入集合a中。直觀上,按這種 方法選擇相容活動為未安排活動留下盡可能多的時間。也就是說,該演算法的貪心選擇的意義是使剩餘的可安排時間段極大化,以便安排盡可能多的相容活動。

演算法greedyselector的效率極高。當輸入的活動已按結束時間的非減序排列,演算法只需o(n)的時間安排n個活動,使最多的活動能相容地使用公共資源。如果所給出的活動未按非減序排列,可以用o(nlogn)的時間重排。

例:設待安排的11個活動的開始時間和結束時間按結

束時間的非減序排列如下:

i 123

4567

891011

s[i] 130

5356

88212

f[i] 456

78910

1112

1314

//4d1 活動安排問題 貪心演算法

#include

using

namespace

std;

template

void greedyselector(int n, type s, type f, bool a);

const

int n = 11;

int main()

; //下標從1開始,儲存活動結束時間

int f = ;

bool a[n+1];

cout

<<"各活動的開始時間,結束時間分別為:"

template

void greedyselector(int n, type s, type f, bool a)

else

}}

活動安排問題 貪心演算法

問題表述 設有n個活動的集合 e 其中每個活動都要求使用同一資源,如演講會場等,而在同一時間內只有乙個活動能使用這一資源。每個活 i都有乙個要求使用該資源的起始時間 si和乙個結束時間 fi,且 si 如果選擇了活動 i,則它在半開時間區間 si,fi 內占用資源。若區間 si,fi 與區間 sj,...

活動安排問題(貪心演算法)

類似的問題是 選點問題和區間覆蓋問題。活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了乙個簡單 漂亮的方法使得盡可能多的活動能相容地使用公共資源。設有n個活動的集合e 其中每個活動都...

貪心演算法 活動安排問題

貪心演算法 活動安排問題 具體求解思路 首先將活動按照結束時間從小到大排序,然後將starttime i 大於finishtime i 1 的活動安排進去,由於活動結束時間是事前排好序的 具體排序方法可以看我之前的部落格 所以按照此方法,安排的活動相對於來說總是先結束的,這樣來說就可以盡量最大化的利...