教室调度问题—贪婪算法—要求尽可能多的将课程安排在某间教室,如何安排?——结束时间最早的课,动态规划——背包问题——贪心算法

本文主要是介绍教室调度问题—贪婪算法—要求尽可能多的将课程安排在某间教室,如何安排?——结束时间最早的课,动态规划——背包问题——贪心算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

课程

开始时间

结束时间

美术

9:00

10:00

英语

9:30

10:30

数学

10:00

11:00

计算机

10:30

11:30

音乐

11:00

12:00

要求尽可能多的将课程安排在某间教室,如何安排?

处理思路

我们没有办法将这些课都安排在一间教室,因为有些课的上课时间有冲突。

具体做法如下:

1)选出结束时间最早的课,它就是要在这间教室上的第一堂课

2)接下来,必须选择第一堂课结束后才开始的课。同样,要选择结束最早的课,这是在这间教室上的第二堂课。

3)重复以上的步骤,即可完成排课

实现过程

1) 美术课结束时间最早

课程

开始时间

结束时间

美术

9:00

10:00

英语

9:30

10:30

数学

10:00

11:00

计算机

10:30

11:30

音乐

11:00

12:00

 

2)美术课结束后,接下来的课必须在10:00后开始,所以英语课不满足条件。

数学课满足

课程

开始时间

结束时间

美术

9:00

10:00

英语

9:30

10:30

数学

10:00

11:00

计算机

10:30

11:30

音乐

11:00

12:00

3)数学课结束后,按照之前的处理方法,选择音乐课

课程

开始时间

结束时间

美术

9:00

10:00

英语

9:30

10:30

数学

10:00

11:00

计算机

10:30

11:30

音乐

11:00

12:00

因为这间教室的排课表为:

课程

开始时间

结束时间

美术

9:00

10:00

数学

10:00

11:00

音乐

11:00

12:00

很多人会说,这个算法太容易,太显而易见,肯定不对。但这正是贪婪算法的优点——简单易行!

贪婪算法的思想:每一步都采取最优的做法。比如上例中,每次都选择结束最早的课,所以用专业术语说就是:每一步都选取局部最优解最终得到的就是全局最优解。

再比如现实生活中,找67元的零钱。没有人会首先想到从抽屉里找67个1元钱给顾客,为什么?因为这会产生67次的找钱行为,我们都希望用最少的次数把零钱找齐。

所以过程是:50元->10元->5元->2元

 

这篇关于教室调度问题—贪婪算法—要求尽可能多的将课程安排在某间教室,如何安排?——结束时间最早的课,动态规划——背包问题——贪心算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211550

相关文章

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

关于Nginx跨域问题及解决方案(CORS)

《关于Nginx跨域问题及解决方案(CORS)》文章主要介绍了跨域资源共享(CORS)机制及其在现代Web开发中的重要性,通过Nginx,可以简单地解决跨域问题,适合新手学习和应用,文章详细讲解了CO... 目录一、概述二、什么是 CORS?三、常见的跨域场景四、Nginx 如何解决 CORS 问题?五、基

MySQL安装时initializing database失败的问题解决

《MySQL安装时initializingdatabase失败的问题解决》本文主要介绍了MySQL安装时initializingdatabase失败的问题解决,文中通过图文介绍的非常详细,对大家的学... 目录问题页面:解决方法:问题页面:解决方法:1.勾选红框中的选项:2.将下图红框中全部改为英

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

Nginx实现动态封禁IP的步骤指南

《Nginx实现动态封禁IP的步骤指南》在日常的生产环境中,网站可能会遭遇恶意请求、DDoS攻击或其他有害的访问行为,为了应对这些情况,动态封禁IP是一项十分重要的安全策略,本篇博客将介绍如何通过NG... 目录1、简述2、实现方式3、使用 fail2ban 动态封禁3.1 安装 fail2ban3.2 配

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态