贪婪算法之会议室预定
贪婪算法
- 特性
- 评价
- java代码
贪婪算法,又名贪心算法,即将一个整体的任务划分为串行的每一小步,在每一小步中采取最优最好的解法,不需要考虑最终为何,当然希望这样最终的结果就是最优的。
特性
- 贪婪算法并没有固定的算法解决框架,算法的关键是贪婪策略的选择,根据不同的问题选择不同的策略。
- 必须注意的是策略的选择必须具备无后效性,即某个状态的选择不会影响到之前的状态,只与当前状态有关,所以对采用的贪婪的策略一定要仔细分析其是否满足无后效性。
评价
贪婪算法名副其实,在很多种场景中不一定能得到真正的最优解(例如动态规划等),但在某些场景中,的确是一种高效简单的得到最接近正确答案的方式,其最关键还是贪婪策略的选择问题。
java代码
package greedy;
/**
- 贪婪算法之会议室预订
- 思路:
贪婪算法:每次只寻找最快结束的那个会议,同时下一场会议的开始时间要满足在上一场会议的结束时间之后
1. 先将会议信息按照结束时间排序
2. 依次遍历会议信息,挑出会议开始时间在上一个结束时间之后的会议即可。
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Meetings implements Comparable{
private Integer no;
private Integer beginTime;private Integer endTime;@Override
public int compareTo(Meetings o) {if (endTime > o.getEndTime()){return 1;}else {return -1;}
}public Meetings(int no, int beginTime, int endTime){this.no = no;this.beginTime = beginTime;this.endTime = endTime;
}public String toString() {return "Meetings" + no +"{ beginTime: " + beginTime + ", endTime: " + endTime + " }";
}public void setEndTime(Integer endTime) {this.endTime = endTime;
}public Integer getEndTime(){return endTime;
}public Integer getBeginTime() {return beginTime;
}public void setBeginTime(Integer beginTime) {this.beginTime = beginTime;
}public Integer getNo() {return no;
}public void setNo(Integer no) {this.no = no;
}public static void main(String[] args){Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();System.out.println("The meetings num is " + num);Meetings meeting = null;List<Meetings> list = new ArrayList<>();for (int i = 0; i < num; i++){int no = scanner.nextInt();int beginTime = scanner.nextInt();int endTime = scanner.nextInt();meeting = new Meetings(no, beginTime, endTime);list.add(meeting);}for (Meetings meetings : list){System.out.println(meetings);}Collections.sort(list);int currentEndTime = 0;for (int i = 0; i < num; i++){if (list.get(i).getBeginTime() > currentEndTime){System.out.println(list.get(i));currentEndTime = list.get(i).getEndTime();}}
}
}
参考博文:
[1] https://www.jianshu.com/p/fede80bad3f1
[2] https://www.jianshu.com/p/86daf14620b1
贪婪算法之会议室预定相关推荐
- linux下搭建mrbs会议室预定管理系统
linux下搭建mrbs会议室预定管理系统 linux下搭建mrbs会议室预定管理系统 Meeting Room Booking System (MRBS) 是一个基于 PHP/MySQL 开发的,使 ...
- Duang,钉钉会议室预定系统已上线!
简介:5分钟可以干什么?喝一杯咖啡,回一封邮件,还是开发上线一个钉钉应用.云开发平台联合钉钉开发平台推出0门槛打造你的第一个钉钉应用的活动,完成相应任务后,即可领取精美奖品.春暖花开,领个背包去踏春吧 ...
- Duang,您的钉钉应用已上线!云开发5分钟快速打造钉钉会议室预定系统
简介: 5分钟可以干什么?喝一杯咖啡,回一封邮件,还是开发上线一个钉钉应用.云开发平台联合钉钉开发平台推出0门槛打造你的第一个钉钉应用的活动,完成相应任务后,即可领取精美奖品.春暖花开,领个背包去踏春 ...
- 华为智慧屏云会议怎么操作_会议室预定系统有哪些?怎么操作
会议室预定系统有哪些?怎么操作?现在很多的企业都在开展一个智能办公环境,尤其是像会议室预定这样的操作,都会借助到一个会议管理系统来进行操作,市面上其实挺多这样的系统,那究竟要如何去操作这样一款会议室预 ...
- python会议室系统预定_会议室预定系统
会议室预定 height: 60px; width:100%; background-color: #2446AB; font-size: 30px; } .crm { font-family: in ...
- 视频会议室预定小程序_6个最佳免费视频会议应用程序
视频会议室预定小程序 Agenturfotografin/Shutterstock.comAgenturfotografin / Shutterstock.com If you suddenly fi ...
- 会议室预定管理系统_企业应用会议室智能预约管理系统有哪些好处
随着社会的科技进步,自动化办公软件层出不穷,智能会议预约系统已在企业当中广泛应用.会议预约系统顾名思义就是用于管理企业会议室的软件系统,有人会疑问会议室需要软件管理吗,有很多人都不清楚这类系统的作用和 ...
- 审批汇报管理系统、请假出差、外出加班、审批抄送、物品领用、用章用车、报销付款、费用申请、合同审批、活动经费、入职转正、离职交接、绩效自评、招聘需求、立项申请、会议室预定、换班交班、库存盘点、Axure
审批汇报管理系统.请假出差.外出加班.会议室预定.物品领用.用章用车.报销付款.费用申请.合同审批.活动经费.入职转正.离职交接.绩效自评.招聘需求.立项申请.售后工单.换班交班.库存盘点.Axure ...
- python 会议室预约系统_会议室预定功能
一.功能介绍 这是一个基于前端页面js代码的动态效果和后端对数据库数据更新的操作,主要实现的是会议室的预定功能,当员工进入预定页面后可以看到某天的某个会议室的某个时段是否被预定,当没被预定的情况下,就 ...
最新文章
- EST | 系统评价污水样品中选定药物、非法药物及其代谢物的稳定性
- 五年级用计算机探究规律教案,人教版五年级上册数学《用计算器探索规律》教案...
- if else if else语句格式_你还在用if/else吗?
- html5折叠卡片,基于HTML5折叠卡片式下拉菜单代码
- Silverlight 3 学习概要
- Ansible-playbook 学习
- 工作流Activiti5.13学习笔记(一)
- 从键盘上打开 Mac 应用程序的 4 种方法
- spring aop advice
- JVisualVM的使用教程
- Mac 删除不必要的 Adobe PS AI 组件
- 2022前端春招——CVTE笔试编程题
- 菜鸟教程 linux ubuntu,菜鸟教程 Ubuntu 11.0下搭建Web服务器
- 重温计算机简史:从石头计数到计算机
- 第22章 声音与音乐
- sap fi清账函数POSTING_INTERFACE*的使用
- Matlab将连续图片处理为视频
- Fastqc使用说明
- 一个程序员该有的自我修养
- 工信部域名icp查询 在哪查询域名icp信息