貪心演算法 活動選擇問題

2021-07-14 16:49:34 字數 1760 閱讀 9253

需要閱讀這篇**的同學應該都知道貪心演算法的定義吧,所以這裡就不贅述什麼叫貪心演算法了。如果確實不知道什麼是貪心演算法,可以去看一下《演算法導論》,問度娘也是挺好的。

下面簡述一下活動選擇問題:你是乙個場地管理員,你收到的很多的活動申請,每個活動的開始時間和結束時間會有交錯,也就是說有些活動不能同時舉辦,你需要做的就是在規劃乙個能舉辦盡可能多的活動方案。

首先介紹本**中使用的活動檔案config.ini(不要吐嘈檔案名字及格式),裡面每一行都代表了乙個活動的開始時間和結束時間,具體如下:

1 4

3 5

0 6

5 7

3 8

5 9

6 10

8 11

8 12

2 13

12 14

下面的**就是實現對檔案中的活動申請使用貪心演算法進行規劃,選出最佳的方案。

/*

* * author: storymonster

*last change date: 2016/6/28

*/#include

#include

#include

typedef struct activity

activity;

activity *head = (activity *)malloc(sizeof(activity));

int nodecount =

0;void insertactivity(activity *act)

activity *p = head;

while(p->next !=

null) p = p->next;

p->next = act;

}void deleteactivity(activity *act)

else

free(act);

}void readconfigfile(void)

int index =

0; while(1)

act->index =

++index;

act->next =

null;

insertactivity(act);

}fclose(fp);

fp =

null;

}void greedyalgorithm(int starttime)

p = p->next;

}if(head ==

null) return ;

p = head->next;

activity *currentbest = head;

while(p!=

null)

p = p->next;

}std::cout

<<

"activity "

" start time: "

" end time: "

endtime;

deleteactivity(currentbest);

currentbest =

null;

greedyalgorithm(time);

}int main()

活動選擇問題是使用貪心演算法的經典問題,對於理解貪心演算法很有幫助。針對貪心演算法的實踐,我還有一篇」貪心演算法-huffman編碼」。

貪心演算法 活動選擇問題

活動選擇問題 就是給定一組活動的開始時間和結束時間,然後他們都需要使用到乙個資源,這個資源每次只有乙個活動可以用,要求求出乙個最大的相互相容的活動子集。首先定義了乙個集合sij 其中s就是所有活動的集合,fi是活動ai的完成時間si是活動ai的開始時間。這道題如果是用dp來解的話,就需要找到最優解的...

貪心演算法 活動選擇問題

前言 貪心演算法也是用來解決最優化問題,將乙個問題分成子問題,在現在子問題最優解的時,選擇當前看起來是最優的解,期望通過所做的區域性最優選擇來產生乙個全域性最優解。書中先從活動選擇問題來引入貪心演算法,分別採用動態規劃方法和貪心演算法進行分析。本篇筆記給出活動選擇問題的詳細分析過程,並給出詳細的實現...

貪心演算法 活動選擇問題

前言 貪心演算法也是用來解決最優化問題,將乙個問題分成子問題,在現在子問題最優解的時,選擇當前看起來是最優的解,期望通過所做的區域性最優選擇來產生乙個全域性最優解。書中先從活動選擇問題來引入貪心演算法,分別採用動態規劃方法和貪心演算法進行分析。本篇筆記給出活動選擇問題的詳細分析過程,並給出詳細的實現...