贪婪算法

  • 特性
  • 评价
  • java代码

贪婪算法,又名贪心算法,即将一个整体的任务划分为串行的每一小步,在每一小步中采取最优最好的解法,不需要考虑最终为何,当然希望这样最终的结果就是最优的。

特性

  1. 贪婪算法并没有固定的算法解决框架,算法的关键是贪婪策略的选择,根据不同的问题选择不同的策略。
  2. 必须注意的是策略的选择必须具备无后效性,即某个状态的选择不会影响到之前的状态,只与当前状态有关,所以对采用的贪婪的策略一定要仔细分析其是否满足无后效性。

评价

贪婪算法名副其实,在很多种场景中不一定能得到真正的最优解(例如动态规划等),但在某些场景中,的确是一种高效简单的得到最接近正确答案的方式,其最关键还是贪婪策略的选择问题。

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

贪婪算法之会议室预定相关推荐

  1. linux下搭建mrbs会议室预定管理系统

    linux下搭建mrbs会议室预定管理系统 linux下搭建mrbs会议室预定管理系统 Meeting Room Booking System (MRBS) 是一个基于 PHP/MySQL 开发的,使 ...

  2. Duang,钉钉会议室预定系统已上线!

    简介:5分钟可以干什么?喝一杯咖啡,回一封邮件,还是开发上线一个钉钉应用.云开发平台联合钉钉开发平台推出0门槛打造你的第一个钉钉应用的活动,完成相应任务后,即可领取精美奖品.春暖花开,领个背包去踏春吧 ...

  3. Duang,您的钉钉应用已上线!云开发5分钟快速打造钉钉会议室预定系统

    简介: 5分钟可以干什么?喝一杯咖啡,回一封邮件,还是开发上线一个钉钉应用.云开发平台联合钉钉开发平台推出0门槛打造你的第一个钉钉应用的活动,完成相应任务后,即可领取精美奖品.春暖花开,领个背包去踏春 ...

  4. 华为智慧屏云会议怎么操作_会议室预定系统有哪些?怎么操作

    会议室预定系统有哪些?怎么操作?现在很多的企业都在开展一个智能办公环境,尤其是像会议室预定这样的操作,都会借助到一个会议管理系统来进行操作,市面上其实挺多这样的系统,那究竟要如何去操作这样一款会议室预 ...

  5. python会议室系统预定_会议室预定系统

    会议室预定 height: 60px; width:100%; background-color: #2446AB; font-size: 30px; } .crm { font-family: in ...

  6. 视频会议室预定小程序_6个最佳免费视频会议应用程序

    视频会议室预定小程序 Agenturfotografin/Shutterstock.comAgenturfotografin / Shutterstock.com If you suddenly fi ...

  7. 会议室预定管理系统_企业应用会议室智能预约管理系统有哪些好处

    随着社会的科技进步,自动化办公软件层出不穷,智能会议预约系统已在企业当中广泛应用.会议预约系统顾名思义就是用于管理企业会议室的软件系统,有人会疑问会议室需要软件管理吗,有很多人都不清楚这类系统的作用和 ...

  8. 审批汇报管理系统、请假出差、外出加班、审批抄送、物品领用、用章用车、报销付款、费用申请、合同审批、活动经费、入职转正、离职交接、绩效自评、招聘需求、立项申请、会议室预定、换班交班、库存盘点、Axure

    审批汇报管理系统.请假出差.外出加班.会议室预定.物品领用.用章用车.报销付款.费用申请.合同审批.活动经费.入职转正.离职交接.绩效自评.招聘需求.立项申请.售后工单.换班交班.库存盘点.Axure ...

  9. python 会议室预约系统_会议室预定功能

    一.功能介绍 这是一个基于前端页面js代码的动态效果和后端对数据库数据更新的操作,主要实现的是会议室的预定功能,当员工进入预定页面后可以看到某天的某个会议室的某个时段是否被预定,当没被预定的情况下,就 ...

最新文章

  1. DNS MX记录一定要放在A记录之前
  2. websphere内存溢出
  3. 我服了!一些比较恶心的代码片段
  4. SQL2005利用ROW_NUMER实现分页的两种常用方式
  5. 使用JavaScript解答2018第九届蓝桥杯C/C++省赛A组试题
  6. 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
  7. mybatis java8_Java 8 开发的 Mybatis 注解代码生成工具
  8. B 树、B+ 树、B* 树
  9. clion中文乱码_CLion 遇到乱码的解决办法
  10. AppFabric客户端的一些配置(Microsoft.Web.DistributedCache)
  11. 【毕业设计】java银行帐目管理系统(源代码+论文)
  12. 计算机应用基础题excel,计算机应用基础EXCEL练习题.doc
  13. 修正统计的 5 个方法
  14. 【信号与系统】z变换
  15. springcloud Netflix
  16. w ndows10更改浏览器,win10电脑修改默认浏览器的三种方法
  17. leafy tree
  18. 【Bash百宝箱】Makefile快速入门
  19. 网页游戏开发基础——Canvas基本图形绘制
  20. 求生之路怎么显示服务器,求生之路2怎么屏蔽rpg服务器 求生之路2屏蔽rpg服务器方法-超能街机...

热门文章

  1. 【接口篇 / Wan】(6.4) ❀ 01. 拨号宽带经过防火墙后的速度变化 ❀ FortiGate 防火墙
  2. 梦幻西游手游版找不到服务器,梦幻西游手游无法选择服务器怎么办 解决方法...
  3. 如何使用万能地图下载器下载矢量路网
  4. Bootstrap入门练手小项目,创建一个有侧边栏三级标题可页面跳转的导航
  5. android 粒子动画,使用animator实现粒子动画效果
  6. 图灵奖评委们,明年可以考虑下这两位 AI 先驱
  7. java体重指数计算器程序_Android首接触--小程序(体重指数计算器)
  8. 时间对象常用方法 - 获取
  9. VR眼镜和AR眼镜的区别
  10. python股票指标计算库_GitHub - unclevicky/stock: stock,股票系统。使用python进行开发。...