贪心算法实现活动安排问题:
设有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相容。
活动安排问题就是要在所给的活动集合中选出最大的相容活动子集。

在给出的算法中,各活动的起始时间和结束时间存储于数组ar_s和ar_j中且按结束时间的递增f1<=f2<=f3<=...<=fn,排列

此算法一开始选择活动1,并将j初始化为1.然后依次检查活动i是否与当前已选择的所有活动相容。若相容则将活动i加入以选择活动的集合a中;否则,不选择活动i,而继续检查下一活动与集合A中活动的相容性。由于ar_fi总是当前集合a中所有活动的最大结束时间,故活动i与当前集合a中所有活动相容的充分且必要的条件是其开始时间不早于最近加入集合a的活动j的结束时间fi,即si>=fj。若活动i与之相容,则i成为最近加入集合a中的活动,并取代活动j的位置。由于输入的活动以其完成时间的递增排列,所以算法GreedySelect总是 选择具有最早完成时间的相容活动,加入集合a中这种方法选择相容活动,为未安排活动留下尽可能多的时间

#include<stdio.h>void swap(int ar_a[], int a, int b)
{int temp = ar_a[a];ar_a[a] = ar_a[b];ar_a[b] = temp;
}void bubble_sort(int ar_f[], int ar_s[], int left, int right)
{for (int i = left; i < right; i++){for (int j = left + 1; j <= right; j++){if (ar_f[j] < ar_f[j - 1]){swap(ar_s, j, j - 1);swap(ar_f, j, j - 1);}}}
}
void  GreedySelect(int ar_s[], int ar_f[], bool ar_a[], int lenght_ar_s)
{int n = lenght_ar_s - 1;ar_a[1] = true;int j = 1, count = 1;printf("1\n");for (int i = 2; i <= n; i++){if (ar_s[i] >= ar_f[j]){ar_a[i] = true;j = i;count++;printf("%d\n",i);}else{ar_a[i] = false;}}printf("count=%d \n",count);
}int main()
{int ar_s[] = { 0,3,1,0,5,5,3,6,8,2,8,12 };int ar_f[] = { 0,5,4,6,7,9,8,10,11,13,12,14 };const int length_ar_f = sizeof(ar_f) / sizeof(ar_f[0]);const int length_ar_s = sizeof(ar_s) / sizeof(ar_s[0]);bool ar_a[length_ar_f] = {};bubble_sort(ar_f,ar_s,1,length_ar_f-1);GreedySelect(ar_s, ar_f, ar_a, length_ar_s);return 0;
}

贪心算法实现活动安排问题相关推荐

  1. 算法笔记(0002) - 【贪心算法】活动安排问题

    贪心算法 原理 在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解.贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许 ...

  2. 贪心算法解决活动安排-Python实现(排序+贪心选择)

    贪心算法解决活动安排 问题 问题概述 分析问题 解决问题 编程 编程流程以及数据类型选择 发现问题以及解决 最终实现 总结 程序缺陷以及完善 解题心路历程 问题 问题概述 设有n个活动的集合E={1, ...

  3. 贪心算法之活动安排问题C语言代码

    贪心算法之活动安排问题C语言 问题描述 该问题要求高效地安排一系列争用某一公共资源的活动. n:活动的个数,其中每个活动都要求使用同一资源,如演讲会场等.而且在同一时间内只有一个活动能使用这一资源. ...

  4. 贪心算法之活动安排问题(填表详解+思路解析)

    贪心算法 总是选择当前看起来最优的选择(局部最优解),得到的结果是一个整体最优解. 但是总是选择局部最优解并不总是能得到整体最优解,需要在问题具有:贪心选择性和优化子结构时才成立. 贪心选择性:第一次 ...

  5. 贪心算法-02活动安排问题

    活动安排问题 简介 活动安排问题是需要共享公共资源的一系列活动的高效安排问题,以在限定的资源前提下尽可能多地安排活动.一般,算法题中给出开始结束时间的活动序列都可以使用这种贪心思路. 问题描述 有若干 ...

  6. C++编程笔记:贪心算法实现活动安排问题

    问题描述: 设有n个活动的集合E={1,2,-,n},其中,每个活动都要求使用同一资源,而在同一时间内只有一个活动能使用这一资源.每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且s ...

  7. 贪心算法之 活动安排(Java代码实现)

    活动安排问题 – 资源争夺 问题描述 设有 n 个活动的集合 A = {1, 2, - , n}, 其中每个活动都要求使用同一资源,而在同一时间段内只有一个活动能使用资源 要求高效安排一系列争用公共资 ...

  8. 【贪心算法】活动安排问题

    活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合,是可以用贪心算法有效求解的很好例子. 该问题要求高效地安排一系列争用某一公共资源的活动. 贪心算法提供了一个简单.漂亮的方法使得尽可能多的 ...

  9. 基于贪心算法的活动安排问题

    一.问题的描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动. 现在小刘有一些活动计划的 ...

最新文章

  1. 分布式锁原理及实现方式
  2. Navicat数据库备份还原
  3. HDU2018题求母牛数量C++
  4. 计算机科学与技术 单片机,单片机-兰州交通大学计算机科学与技术实验教学中心...
  5. Java微信订单查询
  6. library的英语怎么读音_library怎么读声音
  7. 训练日志 2018.12.16
  8. 计算机系统无法启动 错误恢复怎么办,我电脑在重装系统时出现windows错误恢复怎么办?...
  9. 梧州计算机学考查询,学考成绩查询
  10. H3C 模拟器 防火墙开启Web功能
  11. 设置SQLSERVER的错误日志数量和查找SQLSERVER安装错误日志
  12. 分享一个外泌体数据库
  13. freemarker Java 模板引擎 基本语法
  14. Java 读取Doc/Docx 文档
  15. linux服务添加互信,Linux多节点互信配置
  16. 可买房摇号,北京市工作居住证全面解读
  17. python修改sheet名称_python excel练习:新建sheet、修改名称、设定颜色、打印sheet名称,复制,保存...
  18. 电影票的c语言程序,不知道电影票在小程序也能购买的?分享3款购票小程序赶紧来看看!...
  19. RTI DDS的xml说明
  20. React学习笔记(二) | 受控组件

热门文章

  1. MATLAB安装(2021b)
  2. python 名片管理系统
  3. 带你入门nodejs第二天——http 模块化 npm yarm
  4. C++ primer Plus(第六版)中文版 第四章 复合类型 编程答案
  5. MATLAB算法实战应用案例精讲-【人工智能】机器视觉(概念篇)(最终篇)
  6. 关于圆柱体表面积的计算
  7. Yapi零基础使用教程
  8. 浪擎终端备份系统2008 完善的桌面备份方案
  9. 富文本 —— wangEditor
  10. web前端--用div替代frameset和frame