作业10——贪婪算法之相容问题

本文介绍了如何使用贪婪算法解决活动选择问题,确保同一礼堂的多个活动最大数量地相容。首先,定义了活动相容的条件,然后将活动按截至时间排序,通过遍历选择相容的活动。实例展示了具体操作过程,并分析了算法的时间复杂度。
摘要由CSDN通过智能技术生成

1,问题

有n项活动申请使用同一个礼堂,每项活动有一个开始时间和截至时间。如果任何两个活动都不能同时举行,问何时选择这些活动,从而使得被安排的活动数量达到最多。

2,解析

建模:定义两个活动相容:两个活动不冲突,设si , fi 为活动i的开始时间和截至时间,若活动i 和 j 相容,则si > fj 或 fi < sj
问题即可变为求活动集合S的最大两两相容的子集。

思路:把活动集合按截至时间从小到大排序,然后遍历得到一个最大相容子集。遍历规则:若当前活动与上一个被选择的活动相容则选择,不然则弃之。
实例:
A1:1 -> 3
A2:2 -> 4
A3:4 -> 7
A4:5 -> 9
A5:6 -> 8
A6:7 -> 11
A7:9 -> 13
A8:11 -> 14
A9:12 -> 15
A10: 15 -> 20
A7”10 -> 15

在这里插入图片描述

3,设计

A={1}
j = 1
for i = 2 to n
if si >= fj
A = A∪i
return A

4,分析

算法复杂度:MAX(排序,遍历)

5,源码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define actNum 5
struct act {
   
	char actName = NULL;
	int startTime = 0;
	int endTime = 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值