贪心算法解决会议安排问题

文章目录

前言

一、什么是贪心算法?

贪心算法的基本概念:贪心算法并不从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优选择。

二、会议安排题目

1.题目理解

2.思路剖析

总结



前言

本文将主要介绍贪心算法需要注意的地方以及基本概念,理解和解决最经典的会议安排问题,以及有相应的变形题


一、什么是贪心算法?

  1. 贪心算法的基本概念:贪心算法并不从整体最优上加以考虑,所做的选择只是在某种意义上的局部最优选择
  2. 贪心算法的基本要素:
  • 最优子结构性质:一个问题的最优解包含其子问题的最优解。
  •  贪心选择性质:在每一步选择中都采取当前状态下的最优选择,即不考虑未来的影响,仅考虑当前步的选择,从而希望最终能够找到全局最优解

二、会议安排题目

1.题目理解

这里我们需要根据活动的开始和结束时间来安排最多的活动数目,前提是这里只有一个会场并且时间也只有一天,对于安排活动,根据日常的生活经验,我们可以想到有下面三种安排方式:

  • 先来先服务:谁开始的时间早就安排谁
  • 最短作业时间优先:谁占用会场的时间少就先安排谁
  • 截止时间优先:谁结束的早就先安排谁

下面我们来逐一分析:

如果采用第一种方式,第一个开始的活动占用了很长的时间就会导致后面的活动都无法安排,很多时候并不能满足活动数最多

如果采用第二种方式,假如最晚开始的活动占用会场的时间最少,那么前面的时间都相当于浪费了,也不是一个好的选择

而第三种方式根据结束时间的早晚来安排能够最大程度的未为后面的活动腾出时间,故此类会议安排题目我们都是利用截止时间优先的方式进行安排

2.思路剖析

由上面的题目理解易知我们需要知道活动的开始时间、截止时间并且根据截止时间对活动进行排序。这里我们需要定义两个数组 si 和 fi 分别存储第 i 个活动的开始时间和截止时间,下面我们通过一个列题梳理代码思路。

如图所示,我们首先根据截止时间进行排序,然后我们选择第一个活动最先开始,这时我们发现第一个活动的截止时间是7与第二个活动发生冲突(不相容)则我们要将这个活动去掉,再选择开始时间大于第一个活动的截止时间的活动也就是第三个活动,同理安排好第三个活动,我们也要将冲突的活动剔除,依次类推我们可以选择1、3、5或者1、3、6这两种安排方式,通过这个例题也说明了贪心算法的最优解是不唯一的

下面是这个过程的核心代码:

void GreedySelector(int n, int s[],int f[],bool A[])
{    A[1]=true;//安排第一个活动int j=1;//当前结束活动的下标for(int i=2;i<=n;i++){if(s[i]>f[j]){A[i]=true;//将活动列入安排中j=i;//更新当前结束的活动}elseA[i]=false;
}}

总结

本文通过贪心算法解决了经典的会议安排问题,即在有限的会议室资源下安排尽可能多的互不冲突的活动。首先,我们定义开始时间和结束时间两个关键数组。然后采用贪心算法的策略,按照活动结束时间进行排序,确保每次选择最早结束的活动,从而为后续活动留出更多时间。在具体实现中,使用标志数组来跟踪已安排的活动,并通过迭代选择兼容活动来完成最优安排。通过示例分析,我们验证了该算法能够正确计算出最多可安排的活动数量及其具体组合。这种基于贪心选择的方法不仅保证了解决方案的最优性,还具有较高的执行效率(O(n log n)时间复杂度),非常适合处理此类活动调度问题。
喜欢的朋友们点赞支持一下啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 4 |IMU 死算与校正:惯性导航在资源受限环境的落地

Part 4 |IMU 死算与校正:惯性导航在资源受限环境的落地 本章聚焦 ESP32-S3 平台上如何利用 LSM6DS3 IMU 实现 死算(Dead Reckoning),并结合 零速更新(ZUPT) 或 磁力计辅助 进行 漂移校正,最终通过 EKF/UKF 融合提升定位精度。 一、传感器简介与校准 LSM6DS3 主要参数 加速…

力扣1128题解

记录 2525.5.4 题目&#xff1a; 思路&#xff1a; 先将dominoes[i]的二元全部变为前大后小的形式&#xff0c;再遍历该数组&#xff0c;用数组来记录。 代码&#xff1a; class Solution {public int numEquivDominoPairs(int[][] dominoes) {int [] [] cnt new int [10…

with的用法

Python SQLite 操作详解 本文档详细解释了使用 Python 操作 SQLite 数据库时涉及的关键概念和代码实践&#xff0c;包括 with 语句、事务处理、批量插入以及相关的优化建议。 一、with 语句的作用&#xff08;自动关门的保险库&#xff09; with sqlite3.connect(city_1301.d…

力扣解题汇总(困难)

文章目录 技巧42_接雨水 技巧 42_接雨水 class Solution {public int trap(int[] height) {int LMax 0, RMax 0;int len height.length;int[] L2R new int[len];int[] R2L new int[len];//计数每一个格的左右边最高柱for (int i 0; i < len; i) {LMax Math.max(LMa…

【Redis】Redis常用命令

4.Redis常见命令 4.1 Redis数据结构介绍 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型多种多样&#xff1a; 命令太多&#xff0c;不需要死记&#xff0c;学会查询就好了~ Redis为了方便我们学习&#xff0c;将操作不同数据类型…

Ubuntu 系统上广受好评的浏览器推荐

日常使用与开发者首选 Firefox 特点&#xff1a;开源、隐私保护强大&#xff0c;支持丰富扩展&#xff08;如开发者工具、广告拦截&#xff09;&#xff0c;默认预装且跨平台兼容368。 适用场景&#xff1a;日常浏览、开发者调试&#xff08;支持实时 CSS/JS 编辑&#xff09;、…

Rust Trait 学习

概述 特征&#xff08;trait&#xff09;是rust中的概念&#xff0c;类似于其他语言中的接口&#xff08;interface&#xff09;。特征定义了一个可以被共享的行为&#xff0c;只要实现了特征&#xff0c;你就能使用该行为。 如果不同的类型具有相同的行为&#xff0c;那么我们…

JavaScript性能优化实战(9):图像与媒体资源优化

引言 在当今视觉驱动的网络环境中,图像和媒体资源往往占据了网页总下载量的60%-80%,因此对图像和媒体资源进行有效优化已成为前端性能提升的关键领域。尽管网络带宽持续提升,但用户对加载速度的期望也在不断提高,特别是在移动设备和网络条件不稳定的场景下。 本文作为Jav…

NHANES指标推荐:LC9

文章题目&#xff1a;Association between lifes crucial 9 and kidney stones: a population-based study DOI&#xff1a;10.3389/fmed.2025.1558628 中文标题&#xff1a;生命的关键 9 与肾结石之间的关联&#xff1a;一项基于人群的研究 发表杂志&#xff1a;Front Med 影响…

谷歌 NotebookLM 支持生成中文播客

谷歌 NotebookLM 支持生成中文播客。 2025 年 4 月 29 日&#xff0c;NotebookLM 宣布其 “音频概览”&#xff08;Audio Overviews&#xff09;功能新增 76 种语言支持&#xff0c;其中包括中文。用户只需将文档、笔记、研究材料等上传至 NotebookLM&#xff0c;然后在设置中选…

ElasticSearch深入解析(十):字段膨胀(Mapping 爆炸)问题的解决思路

文章目录 一、核心原理&#xff1a;动态映射的双刃剑1. 动态映射的工作机制2. 映射爆炸的触发条件3. 底层性能损耗 二、典型场景与案例分析1. 日志系统&#xff1a;动态标签引发的灾难2. 物联网数据&#xff1a;设备属性的无序扩展 三、系统性解决方案1. 架构层优化2. 配置层控…

交互式智能体面临长周期决策和随机环境反馈交互等挑战 以及解决办法

交互式智能体面临长周期决策和随机环境反馈交互等挑战 以及解决办法 目录 交互式智能体面临长周期决策和随机环境反馈交互等挑战 以及解决办法随机初始化参数,lora但是训练需要更加细粒度的评价指数(对思考过程评价,对得出结果的证明评价,对结果评价)用户进看到结果《RAGE…

4:机器人目标识别无序抓取程序二次开发

判断文件是否存在 //判断文件在不在 int HandEyeCalib::AnsysFileExists(QString FileAddr) {QFile File1(FileAddr);if(!File1.exists()){QMessageBox::warning(this,QString::fromLocal8Bit("提示"),FileAddrQString::fromLocal8Bit("文件不存在"));retu…

【Touching China】2007-2011

文章目录 1、20072、20083、20094、20105、2011 1、2007 钱学森 身份&#xff1a;中国航天事业奠基人&#xff0c;中国科学院、中国工程院资深院士获奖事迹&#xff1a;钱学森1955年冲破重重阻力回到祖国&#xff0c;长期担任火箭导弹和航天器研制的技术领导职务。他以总体、动…

linux常用基础命令_最新版

常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…

Mamba+Attention+CNN 预测模型:破局长程依赖的计算机视觉新范式

目录 一、引言:从 CNN 到 Mamba 的视觉建模进化之路 二、模型关键组成部分解析 (一)CNN 基干:局部特征提取器 (二)Mamba 块:长程依赖建模核心 (三)注意力机制:特征交互增强器 三、模型创新点 四、模型原理与作用 五、优缺点对比 六、应用领域 一、引言:从 C…

LangChain4j +DeepSeek大模型应用开发——8 Function Calling 函数调用

Function Calling 函数调用也叫 Tools 工具 入门案例 例如&#xff0c;大语言模型本身并不擅长数学运算。如果应用场景中偶尔会涉及到数学计算&#xff0c;我们可以**为他提供一个 “数学工具”。**当我们提出问题时&#xff0c;大语言模型会判断是否使用某个工具。 创建工具…

【Prometheus-Mongodb Exporter安装配置指南,开机自启】

目录 内容概述 一、创建MongoDB监控专用用户二、安装MongoDB Exporter三、启动Exporter服务四、配置Systemd服务五、服务管理命令六、Prometheus集成配置七、Grafana看板 内容概述 本教程详细演示了如何在Linux系统中部署MongoDB Exporter以监控MongoDB数据库&#xff0c;并将…

在 Ubuntu 上安装 cPanel

开始之前&#xff0c;请确保拥有一台 Ubuntu 服务器&#xff0c;推荐使用 Ubuntu 22.04 LTS。如果没有&#xff0c;可以查看免费服务器&#xff1a; 11个免费 VPS&#xff0c;够用一辈子了&#xff01;&#xff08;2025最新&#xff09;Top 11 免费VPS推荐平台对比&#xff08…

【算法基础】插入排序算法 - JAVA

一、算法基础 1.1 什么是插入排序 插入排序是一种简单直观的排序算法&#xff0c;它的工作原理类似于我们打牌时整理手牌的过程。插入排序的核心思想是将数组分为已排序和未排序两部分&#xff0c;每次从未排序部分取出一个元素&#xff0c;插入到已排序部分的适当位置。 1.…