区间贪心算法-——活动安排问题
问题题目
设有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相容。
例如:有n个活动,第i个活动开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动?
设待安排的11个活动的开始时间和结束时间如下表 (按结束时间的非减序排列):
i |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
s[i] |
1 |
3 |
0 |
5 |
3 |
5 |
6 |
8 |
8 |
2 |
12 |
f[j] |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
算法分析:
由于输入的活动以其完成时间的非减序排列,所以算法greedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。 算法greedySelector的效率极高。当输入的活动已按结束时间的非减序排列,算法只需O(n)的时间安排n个活动,使最多的活动能相容地使用公共资源。如果所给出的活动未按非减序排列,可以用O(nlogn)的时间重排。
c语言源码:
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define max 1000int greedselect(int a[],int b[],bool t[],int n){int i,j=0,cnt=1; t[0]=1;printf("(%d,%d)\n",a[0],b[0]);for(i=1;i<n;i++){ //每次选择当前的左区间与上一个的右区间进行比较if(a[i]>b[j]){ //如果当前的左区间大于上一个的右区间,则加入到活动中t[i]=1;printf("(%d,%d)\n",a[i],b[i]);cnt++;j=i;}}return cnt;
}int main(){int k,n,cont;bool t[max];int a[max],b[max];scanf("%d",&n);
for(k=0;k<n;k++){scanf("%d%d",&a[k],&b[k]);t[k]=0;
}
//memset(t,0,sizeof(t));//这里初始化t数组可以用memset函数
cont=greedselect(a,b,t,n);
printf("%d",cont);return 0;
}
区间贪心算法-——活动安排问题相关推荐
- 贪心算法——活动安排、会场安排
重要参数:结构体,当前时间time,cmp比较器 第一题--活动安排: 任务描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校 ...
- 算法设计与分析——贪心算法——活动安排问题
问题描述:设有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--按开始时间从小到大选择活动 ...
最新文章
- 【经验】网络加速:pip
- Java架构体系学习路线图,这六点尤为重要!
- java的4种内部类
- MySQL之SQL优化详解(二)
- xtrbackup更换数据库_XtraBackup 备份还原 MySQL 数据库
- linux 信号量锁 内核,Linux内核信号量互斥锁应用
- 小程序分享到朋友圈功能_小程序开发日记 分享到朋友圈
- 链接属性rel=’external’、rel=’nofollow’、rel=’external nofollow’三种写法的区别...
- Python3爬取豆瓣图书Top250并写入txt文件当中
- ES6新特性_ES6中Map的介绍与API---JavaScript_ECMAScript_ES6-ES11新特性工作笔记032
- python数据结构二叉树的前序,中序,后续遍历与推导
- xsd文件规则和语法
- php主页备案号底部中间,如何获取公安备案号?如何将公安备案号放到网站底部?...
- 谷粒商城-个人笔记(基础篇一)
- 虚拟机vm安装 黑群晖 DS3617xs 6.2
- 如何用无桥图腾柱功率因数校正控制器实现出色的AC-DC功率转换效率
- MacOS 显示隐藏文件快捷键
- QT自定义控件设置文本过长时显示点点点……
- 项目结构优化设计之smv架构
- Guitar Pro2023吉他谱作曲和练习工具