【贪心算法】活动安排问题
- 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子。
- 该问题要求高效地安排一系列争用某一公共资源的活动。
- 贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼容地使用公共资源。
【问题描述】
- 设有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相容。 - 活动安排问题就是在所给的活动集合中选出最大的相容活动子集合。
【算法结构】
数据结构
struct action{int s; //起始时间int f; //结束时间int index; //活动的编号
};
活动的集合E记为数组
action a[1000];
按活动的结束时间升序排序
排序比较因子:
bool cmp(const action &a, const action &b)
{if (a.f<=b.f) return true;return false;
}
使用标准模板库函数排序(下标0未用):
sort(a, a+n+1, cmp);
活动安排问题的贪心算法
//形参数组b用来记录被选中的活动
void GreedySelector(int n, action a[], bool b[])
{b[1] = true; //第1个活动是必选的//记录最近一次加入到集合b中的活动int preEnd = 1;for(int i=2; i<=n; i++)if (a[i].s>=a[preEnd].f){b[i] = true;preEnd = i;}
}
【算法实例分析】
【算法完整实现】
#include <iostream>
using namespace std;struct action{int s;int f;int index;
};bool cmp(const action &a, const action &b)
{if (a.f<=b.f) return true;return false;
}void GreedySelector(int n, action a[], bool b[])
{b[1] = true;int preEnd = 1;for(int i=2; i<=n; i++)if (a[i].s>=a[preEnd].f){b[i] = true;preEnd = i;}
}int main()
{int n;while(scanf("%d",&n) && n){action a[1000];bool b[1000];memset(b,false,sizeof(b));for(int i=1; i<=n; i++){scanf("%d%d",&a[i].s,&a[i].f);a[i].index = i;}sort(a, a+n+1, cmp);GreedySelector(n, a, b);for(int i=1; i<=n;i++)if(b[i]) printf("%d ",a[i].index);printf("\n");}return 0;
}
【贪心算法】活动安排问题相关推荐
- 贪心算法——活动安排、会场安排
重要参数:结构体,当前时间time,cmp比较器 第一题--活动安排: 任务描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校 ...
- 算法设计与分析——贪心算法——活动安排问题
问题描述:设有n个活动的集合E={1,2,-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源. 每个活动i都有一个要求使用该资源的起始时间si和一个结束时 ...
- 贪心算法-活动安排问题
贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择.当然,希望贪心算法得到的最终结果也是整体最优的.虽然贪心算法不能对所有问题都得到 ...
- 算法设计与分析【第七周】贪心算法 活动安排问题
活动安排问题 设有n个活动的集合E={1,2,-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源的起始时间si和一个结束 ...
- 区间贪心算法-——活动安排问题
问题题目 设有n个活动的集合E={1,2,-,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源的起始时间si和一个结束时间 ...
- Java 贪心算法 活动安排问题
import org.junit.Test;/*** @auther qwh* @create 2022-11-21-21:39*/ public class test1 {public void s ...
- 贪心法——活动安排问题
贪心法--活动安排问题 贪心法 贪心法的本质可以认为是动态规划在特定条件下的优化.贪心法满足两个性质,最优子结构性质和贪心选择性质. 满足最优子结构性质意味着问题可以被层层分解为子问题,这些子问题构成 ...
- 贪心算法——会场安排问题
假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场.设计一个有效的贪心算法进行安排. 输入:第1行有一个正整数k,表示有k个待安排的活动.接下来的k行中,每行两个正整数,分别表示k个待安排活 ...
- 贪心算法--会场安排问题
会场用来安排活动,每个活动有一个开始时间和一个结束时间,在某个活动的开始时间到结束时间这段范围内,其他活动不能再被安排,求最多能安排多少场活动. #include<stdio.h> #in ...
- 12贪心法——活动安排相容问题
12基于贪心法的活动安排相容问题 目录 12基于贪心法的活动安排相容问题 简述贪心法 1.问题 2.解析 举个栗子 贪心策略1--按结束时间从小到大选择活动 贪心策略2--按开始时间从小到大选择活动 ...
最新文章
- Ubuntu16.04 pip3 install 报错 working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
- 跨平台表空间传输(摘自eygle《循序渐进Oracle》)
- python 最小硬币数_程序以找到要在Python中达到目标的硬币组合数量
- 《Ext JS 高级程序设计》的目录与样张
- 【Linux】18.设置静态ip的方法(Ubuntu系统、nas、Red-Hat系统)
- H5页面在 ios 端滑动不流畅的问题
- JAVA遇见HTML——JSP篇(JavaBeans)
- hdu 4301 Divide Chocolate 动态规划 递推 多校联合赛第二题
- 决策树的sklearn实现及其GraphViz可视化
- Autojs4脚本大合集(薅羊毛专业版的脚本)
- 非同步DCDC的工作模式(CCM、DCM和BCM)
- python 什么意思_Python中冒号等于(:=)是什么意思?
- 解决win7共享文件夹无法访问
- WebGL varying变量和颜色插值
- 微信公众平台开发——微信授权登录(OAuth2.0)
- Java微信公众平台开发之群发接口(高级群发)
- 最近ChatGPT封号太严重了,这里是解封攻略步骤(建议收藏)
- 论文笔记:Show, Control and Tell:A Framework for Generating Controllable and Grounded Captions
- 《C++primer》第10章:泛型算法
- [4G5G专题-131]:流程 - LTE的功率控制