算法学习之贪心法(会议安排)

算法学习之贪心法(会议安排)
摘要由CSDN通过智能技术生成

贪心法介绍: 一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优选择从而得到全局最优的解决方案。

大体步骤:

  1. 贪心策略:制定贪心策略,并选择最佳的策略实施
  2. 局部最优解:通过策略,一步一步得到局部最优解。
  3. 全局最优解:把所有的局部最优解整合到一起,还原出原来问题的最优解。

示例如下


问题描述

在有限的时间里安排更多的会议进行,任何两个会议不能同时进行。

贪心策略

  1. 每次从剩下未安排的会议中选择会议具有安排 具有最早开始时间且与已安排的会议相容 的会议安排,以增大时间资源的利用率。
  2. 每次从剩下未安排的会议中选择会议具有安排 持续时间最短且与已安排的会议相容 的会议安排,以安排更多一些的会议。
  3. 每次从剩下未安排的会议中选择会议具有安排 具有最早结束时间且与已安排的会议相容 的会议安排,以尽快安排下一场会议。

分析:
策略1中安排最早开始时间,若会议时间长,那么总会议次数必定减少;策略2中安排持续时间最短的,若会议安排时间较晚,则其他会议必定被耽误;那么我们可以选择安排开会较早且会议持续时间较短的会议,即结束时间较早。

所以我们选择策略3:每次从剩下未安排的会议中选择会议具有安排 具有最早结束时间且与已安排的会议相容 的会议安排,以尽快安排下一场会议。

思路

  1. 将会议开始时间和结束时间存入结构体数组中。
  2. 按照结束时间排序,若是结束时间相同,按照开始时间先后排序(即结束时间相等,开始时间早的先安排)。
  3. 依次从未安排的会议中安排会议,下一个会议的开始时间不能超过前面会议的结束时间,否则舍弃该会议,考虑下个会议。

完整代码


#include<iostream> 
#include<algorithm>
#include<cstring> 
using namespace std;

struct Meet
{
   
	int num;  // 会议编号
	int beg;  // 会议开始时间
	int end;  // 会议结束时间
}meet[1000];

bool cmp
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值