活动安排问题(C语言实现)——贪心算法应用(2)
2013-04-11 22:58
696 查看
设有n个活动的集合E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si < fi 。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si >= fj或sj >= fi时,活动i与活动j相容。
使用贪心算法提供了一个简单漂亮的方法使得尽可能多的活动能兼容地使用公共资源。
例:设待安排的11个活动的开始时间和结束时间如下表所示,按结束时间的非减序排列。
![](http://blog.csdn.net/hello_yz/article/details/file:/C:/Users/Melody/AppData/Local/Temp/enhtmlclip/Image.png)
![](http://img.my.csdn.net/uploads/201304/11/1365692590_7394.jpg)
算法分析:
对输入的活动按其完成时间进行非减序排列,总是选择最早完成时间的相容活动加入到安排中。该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的活动。
下面是C语言实现(DEV c++4.9.9.2运行通过)
对于活动安排问题,贪心算法总是能求得整体的最优解。
有兴趣的朋友们可以用数学归纳法证明。
使用贪心算法提供了一个简单漂亮的方法使得尽可能多的活动能兼容地使用公共资源。
例:设待安排的11个活动的开始时间和结束时间如下表所示,按结束时间的非减序排列。
![](http://blog.csdn.net/hello_yz/article/details/file:/C:/Users/Melody/AppData/Local/Temp/enhtmlclip/Image.png)
![](http://img.my.csdn.net/uploads/201304/11/1365692590_7394.jpg)
算法分析:
对输入的活动按其完成时间进行非减序排列,总是选择最早完成时间的相容活动加入到安排中。该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的活动。
下面是C语言实现(DEV c++4.9.9.2运行通过)
#include<stdio.h> void greedy(int s[],int f[],int a[],int k); int main() { int s[] = {1,3,0,5,3,5,6,8,8,2,12}; int f[] = {4,5,6,7,8,9,10,11,12,13,14}; int k; k = sizeof(f)/sizeof(f[0]); int *a; a = (int*)malloc(sizeof(int)*k); greedy(s,f,a,k); system("PAUSE"); } /* * s[]:活动的开始时间 * f[]:活动的结束时间(非降序排列) * a[]:0或者1,为0表示活动不被安排,1表示活动被安排 * k:活动个数 */ void greedy(int s[],int f[],int a[],int k) { int i; int j = 0; for(i=0;i<k;i++) { a[i] = 0;//初始所有活动都未被安排 } a[0] = 1; printf("第1个活动被安排\n"); int count = 1; for(i=1;i<k;i++) { if(s[i] > f[j]) { a[i] = 1; printf("开始%d,结束%d.",s[i],f[i]); j = i; count++; printf("第%d个活动被安排\n",i+1); } } printf("总计%d个活动被安排\n",count); }
对于活动安排问题,贪心算法总是能求得整体的最优解。
有兴趣的朋友们可以用数学归纳法证明。
相关文章推荐
- Python实现--贪心算法与活动安排问题
- 算法Java实现--贪心算法--活动安排问题
- 活动选择问题(活动安排问题)(最大数目活动选择问题)贪心算法C++实现
- 找零钱问题(C语言实现)——贪心算法应用(1)
- 0-1背包和背包问题(C语言实现)——贪心算法应用(3)
- 多机调度问题(C语言实现)——贪心算法应用(4)
- 活动选择问题(活动安排问题)(最大数目活动选择问题)贪心算法C++实现
- 浅谈Python实现贪心算法与活动安排问题
- 找零钱问题(C语言实现)——贪心算法应用(1)
- 活动安排问题——贪心算法应用(2)
- 兔子生娃问题---函数递归应用--c语言实现
- 活动安排问题--贪心算法
- ACM--贪心算法--活动安排问题
- 活动安排问题(贪心算法)
- 贪心算法实现会场安排问题
- 算法设计与分析——活动安排问题——C语言
- 贪心算法_活动安排问题
- 算法导论 第16章 贪心算法-活动选择问题C++实现
- 【贪心算法】贪心算法与活动安排问题
- 算法篇-6-贪心算法-活动安排&背包问题&多机调度