贪心法求解活动安排(java实现)

活动安排问题之贪心算法 问题描述: 设有n个活动的集合E={1,2,.....,n},其中每个活动都要求使用同一个资源(如演讲会场),而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间Si和一个结束时间Fi,且Si 问题分析:   贪心算法 采用的是至顶往下的方式来考虑问题,不像动态规划采用至上向顶的方式,本问题核心思想,每次采用结束时间最早的那个,留下尽可能多的时间来考虑 阅读详情
贪心法描述:
贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。
在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。

问题描述:
现有一组活动由你安排,但要求你在最短的时间内安排尽可能多的活动。

代码如下:
Activity类用于封装活动对象,包括活动的开始时间和结束时间,另外实现了Comparable接口,用于按照结束时间非递减排序
public class Activity implements Comparable<Activity> {
	private String startTime;//活动开始时间
	private String endTime;//活动结束时间
	public Activity(String startTime,String endTime){
		this.startTime=startTime;
		this.endTime=endTime;
	}
	/**
	 * 按照活动结束时间非递减排序
	 */
	@Override
	public int compareTo(Activity obj) {
		String targetEndTime=obj.getEndTime();
		int endHour=Integer.parseInt(endTime.split(":")[0]);
		int endMin=Integer.parseInt(endTime.split(":")[1]);
		int targetEndHour=Integer.parseInt(targetEndTime.split(":")[0]);
		int targetEndMin=Integer.parseInt(targetEndTime.split(":")[1]);
		int i=endMin>targetEndMin?1:(endMin<targetEndMin?-1:0);
		return endHour>targetEndHour?1:(endHour<targetEndHour?-1:(i));
	}
	public String getStartTime() {
		return startTime;
	}
	public void setStartTime(String startTime) {
		this.startTime = startTime;
	}
	public String getEndTime() {
		return endTime;
	}
	public void setEndTime(String endTime) {
		this.endTime = endTime;
	}
	@Override
	public String toString() {
		return startTime + "~" + endTime;
	}
}
ActivityPlan类为具体的执行类,通过其layout方法来安排活动
public class ActivityPlan {
	List<Activity> res=new ArrayList<Activity>();
	public List<Activity> layout(Iterator<Activity> activities){
		if(!activities.hasNext()){
			return res;
		}
		Activity activity=activities.next();
		int size=res.size();
		if(size==0){
			res.add(activity);
		}else{
			Activity preActivity=res.get(size-1);
			String preEndTime=preActivity.getEndTime();
			String thisStartTime=activity.getStartTime();
			if(legal(preEndTime,thisStartTime)){
				res.add(activity);
			}
		}
		return layout(activities);
	}
	/**
	 * 当前活动的开始时间是否在上一个活动的结束时间之后
	 */
	private boolean legal(String preEndTime, String thisStartTime) {
		int preHour=Integer.parseInt(preEndTime.split(":")[0]);
		int preMin=Integer.parseInt(preEndTime.split(":")[1]);
		int thisHour=Integer.parseInt(thisStartTime.split(":")[0]);
		int thisMin=Integer.parseInt(thisStartTime.split(":")[1]);
		int i=preMin>thisMin?-1:(preMin<thisMin?1:0);
		int j=preHour>thisHour?-1:(preHour<thisHour?1:(i));
		return j>=0;
	}
}
Main类用于代码测试
public class Main {
	public static void main(String[] args) {
		Set<Activity> activitys=new TreeSet<Activity>();
		activitys.add(new Activity("9:30","10:30"));
		activitys.add(new Activity("7:30","8:50"));
		activitys.add(new Activity("10:40","11:30"));
		activitys.add(new Activity("8:00","10:30"));
		activitys.add(new Activity("8:30","11:40"));
		activitys.add(new Activity("10:30","12:30"));
		ActivityPlan plan=new ActivityPlan();
		List<Activity> res=plan.layout(activitys.iterator());
		for(Activity activity:res){
			System.out.print("\t"+activity);
		}
	}
}
程序输出:7:30~8:50    9:30~10:30    10:40~11:30
贪心算法求解活动安排<算法分析> System.out.println("第"+i+"活动被选中,其开始时间为:"+s[i-1]+",结束时间为:"+f[i-1]);if(s[i]>=f[j]){ //下一个活动开始时间大于大于等于上一个活动结束时间。System.out.println("请分别输入"+number+"个活动的开始时间:");System.out.println("请分别输入"+number+"个活动的结束时间:");2.要求手工输入s[10]及f[10],其中注意自己判断s[i] 阅读详情

相关推荐

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解)

本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。

weixin_27032989的博客 568

【贪心法】--活动安排问题

【贪心法】--活动安排问题1、活动安排  设有n个活动的集合 E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。  每个活动 i 都有一个要求使用该资源的起始时间 si 和一个结束时间 fi,且 si < fi。如果选择了活动i,则它在半开时间区间 [si ,fi ) 内占用资源。若区间 [si , fi )与区间 [sj, fj ...

荷叶田田 2199

高斯泼溅(Gaussian Splatting):3D建模的颠覆性革命

高斯泼溅(Gaussian Splatting):3D建模的颠覆性革命

yingtu666的博客 5158

算法设计与分析——活动安排问题(Java)

算法设计与分析——活动安排问题(Java) 算法设计与分析 贪心法求解活动安排问题的算法

qq_53709454的博客 3809

RAGFlow + GraphRAG+ 知识图谱 + QwQ32B探索实践

RagFlow 是一款开源的 RAG(Retrieval-Augmented Generation)引擎,专注于深度文档理解,能够助力企业及个人构建高效的 RAG 工作流程。借助大语言模型(LLM),它可以精准处理各种复杂格式的数据,为用户提供可靠的问答服务,并附上详实的引用依据。

技术引领业务创新 8万+

Cadence OrCAD Capture CIS元器件管理时ERROR(ORCIS-6454): Temporary part number tracking is turned on报错的解决方法

使用Part manager对工程的元器件进行批量管理时,出现如下图所示的ERROR(ORCIS-6454): Temporary part number tracking is turned on报错其解决方法如下。

fydar的博客 3507

活动安排

描述 设有n个活动的集合E={1,2,3…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动 i 都有一个要求使用该资源的起始时间 si 和一个结束时间 fi ,且si&lt;fi。要求设计程序,使得安排的活动最多。 输入 输入只有一个用例,第一行为一正整数n,表示活动个数,接下来n行,每行两个整数,分别表示第 i 号活动的起始时间和结束时间。...

weixin_43589396的博客 653

goahead(嵌入式Web服务器)之openssl 应用篇

1、环境配置 在me.h文件里修改以下宏定义 ME_COM_MBEDTLS 0 ME_COM_MATRIXSSL 0 ME_COM_NANOSSL 0 ME_COM_OPENSSL 1 2、添加 goahead-openssl.c goahead-openssl.c这个文件在有些goahead源码中是没有的,后面的章节中会提供openssl应用测例 3、依赖的库 goahead的openssl 应用需要依赖libssl.a与libcrypto.a(libssl.so与libcrypto.so)两个库,做好

weixin_40732273的博客 2089

【算法设计与分析】活动安排问题(贪心经典问题)

说明:本博客主要代码及方法介绍来源于:【算法设计与分析(第5版)】【王晓东】 一、题目背景介绍 设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。 每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi 。 如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。 活动i...

○( ^皿^)っHiahiahia…的博客 4870

吃透工业通信:C#工控机实现Modbus、OPC UA、Profinet、EtherCAT协议全适配

本文介绍了基于C#的工业通信协议全适配方案,采用分层架构设计实现Modbus、OPC UA、Profinet和EtherCAT四种主流协议的统一管理。核心包括:1)三层架构(应用层、抽象层、协议层)降低耦合;2)定义统一通信接口IIndustrialCommunication;3)工厂模式创建不同协议实例;4)以Modbus TCP为例展示具体实现。该方案经过实际项目验证,可简化多协议设备管理,提升工业自动化系统的开发效率。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 725

论文阅读:2024 ACM CCS “Do Anything Now”: Characterizing and Evaluating In-The-Wild Jailbreak Prompts on

大语言模型(LLMs)的滥用问题引起了公众和大语言模型供应商的高度关注。有一种特殊的对抗性提示,叫做越狱提示,它已成为绕过防护措施、让大语言模型生成有害内容的主要攻击手段。在这篇论文中,作者使用新框架JailbreakHub,对2022年12月至2023年12月期间的1405个越狱提示进行了全面分析。作者识别出131个越狱提示社区,发现了越狱提示的独特特征以及主要攻击策略,比如提示注入和权限提升。

CSPhD-winston的博客 1414

java活动安排_贪心法求解活动安排(java实现)

贪心法描述:贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。问题描述:现有一组活动由你安排,但要求你在最短的时间内安排尽可能多的活动。代码如下:Activity类用于封装活动对象,包括活动的开始时间和结束时间,另外实现了Comparable接口,用于...

weixin_31773159的博客 561

LDO 上电过冲的根因

LDO在上电瞬间常出现短时过冲电压(3.4V-3.5V),可能损坏敏感器件。其根本原因是:低

硬核科技 296

java活动安排_贪心法求解活动安排(java实现) | 学步园

贪心法描述:贪心问题描述:现有一组活动由你安排,但要求你在最短的时间内安排尽可能多的活动。代码如下:Activity类用于封装活动对象,包括活动的开始时间和结束时间,另外实现了Comparable接口,用于按照结束时间非递减排序public class Activity implements Comparable {private String startTime;//活动开始时间private ...

weixin_39717598的博客 90

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

天天肝大厂面试题?这几个面试必考算法你掌握了吗?

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!成功只会留给那些有准备的人!//填空//输出5。

2401_84103216的博客 798

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

会场安排问题(贪心法)

问题描述: 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。设计一个有效的贪心算法进行安排(这个问题实际上是著名的图着色问题。若将每一个活动作为图的一个顶点,不相容活动间用边相连。使相邻顶点着有不同颜色的最小着色数,相应于要找的最小会场数)。 来换一个描述 为了能够更加生动说明问题的整个过程,所以换一个类似的描述来契合《算法图解》一书中的描述。 你没法让这些课...

我没有三颗心脏的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

西北农林科技大学2020年算法分析与设计实验一——贪心法求解会场安排问题 & 基于分治法的循环日程表算法

实验1 贪心法求解会场安排问题 & 基于分治法的循环日程表算法 实验内容 本实验要求基于算法设计与分析的一般过程(即待求解问题的描述、算法设计、算法描述、算法正确性证明、算法分析、算法实现与测试),使用贪心法求解会场安排问题以及利用分治法的循环日程表算法,以期从实践中理解分治法的思想、求解策略及步骤。(有余力者,鼓励挑战n≠2k的情形的循环日程表问题,以及贪心法与分治法的其它应用实例) 实验目的 理解贪心法的核心思想以及分治法求解过程; 理解分治法的核心思想以及分治法求解过程。 环境要.

算算的博客 4014

活动安排问题——贪心算法解决方案

1、概述 (1)案例: 多个社团申请同一间教室开会,问如何分配和安排,使得此教室在一天中能够分配给更多的社团使用 一台公共电脑可以被许多人申请使用,如何分配使得此电脑在一天中能够为更多的人服务使用 (2)活动安排问题概述 活动安排问题就是要在所给的活动集合中选出最大的相容活动子集合。该问题要求高效地安排一系列争用某一公共资源的活动。贪心算法提供了一个简单、漂亮的方法使得尽可能多的活动能兼...

wangqsse的博客 7546

算法分析与设计实验之 java实现贪心法解决活动安排问题

n},其中每个活动都要求使用同一资源,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。活动安排问题要求在所给的活动集合中选出最大的相容活动子集。(4)设有如下一组活动,编写算法和程序,从中选出最大的相容活动子集。

qq_62159107的博客 526

贪心法-求解蓄栏保留问题

题目链接:3190 – Stall Reservations (poj.org) 采用与求解活动安排问题类似的贪心思路,将所有活动这样排序:结束时间相同按开始时间递增排序,否则按结束时间递增排序。 求出一个最大兼容活动子集,将它们安排在一个蓄栏中(蓄栏编号为1);如果没有安排完,再在剩余的活动再求下一个最大兼容活动子集,将它们安排在另一个蓄栏中(蓄栏编号为2),以此类推。 也就是说,最大兼容活动子集的个数就是最少蓄栏个数。 JAVA: //超时 import java.util.Arrays; impor

weixin_45982141的博客 1981

算法与数据结构-贪心法

​ 贪心法的基本思路是在对问题求解时总是做出在当前看来是最好的选择,也就是说贪心法不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。​ 人们通常希望找到整体最优解,所以采用贪心法需要证明设计的算法确实是整体最优解或求解了它要解决的问题。1 贪心选择性质所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。也就是说,贪心法仅在当前状态下做出最好选择,即局部最优选择,然后再去求解做出这个选择后产生的相应子问题的解。2 最优子结构性质​

weixin_45982141的博客 1822

【202309】算法基础-L6-贪心法(1)

确定最优子结构分析题目,找到贪心选择策略尝试证明贪心选择的正确性,如果能证明,则贪心法成立,反之,该题目不可用贪心法求解(例如第3章中的《打家劫舍》例题)

cyrilhq的博客 254

【期末算法课程设计十道题】-【贪心算法】-【6-活动安排问题】

大家好,我是被白菜拱的猪。 一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy! 十道题最后一题啦。 第六题 这道题可以抽象为贪心算法的活动安排问题。 我严重怀疑这道题的出题人和第四题修路的那道是同一个人,两道题都表达了对学校穷的不满,学校穷,想把打饭窗口竟可能的减少,但是学生在自己的吃饭时间排队吃不到饭就不开心了呀,所以学校想既能省钱,又能让学生开学,于是出了这么一个问题,没得办法,本来就吃的不好,嗐。 聪明的我又网上搜一搜了相关资料,毕竟一学期没有听

放开这颗白菜让我来 875

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

活动安排问题

weixin_54241410的博客 1034

【算法分析】实验 1. 基于贪心的会议安排问题

目录 实验内容 实验目的 环境要求 实验结果 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 实验总结 附录:测试数据 实...

weixin_30906701的博客 1257
上一篇: java实现N皇后问题
下一篇: 动态规划法求解硬币找零(Java)
JavaMan_chen
博客等级 码龄19年 329粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值