贪心算法之活动安排问题(填表详解+思路解析)

2023-11-04

贪心算法

总是选择当前看起来最优的选择(局部最优解),得到的结果是一个整体最优解。

但是总是选择局部最优解并不总是能得到整体最优解,需要在问题具有:贪心选择性和优化子结构时才成立。

贪心选择性:第一次做出贪心选择是正确的;

优化子结构:第一次做完贪心选择后,得到一个与原问题定义相同(但输入不同)的子问题;

贪心算法的基本要素

贪心选择性质

1.贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。

2.贪心算法通常以自顶向下的方式进行,一迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。动态规划通常以自底向上的方式解决子问题。

最优子结构性质

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。

贪心算法的求解过程

问题的定义
优化解的结构分析
算法设计
算法复杂性
算法正确性证明

活动安排问题定义

定义(活动)

设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,而在同一时间内只有一个活动能使用这个资源。

定义(相容活动)

若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。
在这里插入图片描述
输入:

活动安排问题的贪心算法思路

1.将各个活动按照活动结束时间fi排序,且f1<=f2<=f3…

2.选择活动1,要求该活动的结束时间最早

3.从2开始按顺序比较各个活动,选择第一个与活动1相容的活动i

4.从i+1开始按顺序考察各个活动,选择第一个与活动 i 相容的活动 j

**每次选择与现有活动相容的结束时间最早的活动 **

举例详解算法过程

现在给出下列活动,s表示开始时间,f表示结束时间;

在这里插入图片描述
根据算法,我们首选选择结束时间最早的活动作为第一个活动,第一个活动为:1

然后选择开始时间大于第一个活动的结束时间的活动,而且该活动的结束时间要求最早。显然是活动4;

同理,寻找开始时间晚于活动4的结束时间且结束时间最早的活动,一直到到无活动可选为止。

在这里插入图片描述

复杂度分析

在这里插入图片描述

算法可以得到最优解的证明

证明贪心算法可以得到最优解要求:

  1. 证明第一次选择是正确的
  2. 证明第一次选择后,问题输入变为与第一个活动相容的活动的子问题
    (因为第二个选择的活动 i 是 E’ 中结束时间最早的,所以活动 i 是正确的
    依次类推所有的选择都是正确的)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贪心算法之活动安排问题(填表详解+思路解析) 的相关文章

  • CSS命名规范——BEM思想(非常赞的规范)

    人们问我最多的问题之一是在CSS类名中 和 是什么意思 它们的出现是源于BEM和Nicolas Gallagher BEM的意思就是块 block 元素 element 修饰符 modifier 是由Yandex团队提出的一种前端命名方法论

随机推荐

  • 软件研发过程中的5种最常见的图

    一 背景 软件研发过程中 我们常有如下的困惑 有时我们需要设计一个较大型的业务系统 或者做一个开源项目 我们该如何将这个系统的整体功能 逻辑细节一层层描述清楚呢 我们接手了一个大型复杂的系统 该如何一点点从宏观到微观的去梳理整个功能流转的脉
  • Apache APISIX Dashboard 任意命令执行批量编写工具

    Apache APISIX Dashboard远程命令执行漏洞 CVE 2021 45232 漏洞描述 Apache APISIX 是一个动态 实时 高性能的 API 网关 提供负载均衡 动态上游 灰度发布 服务熔断 身份认证 可观测性等丰
  • Verilog 层次化文件设计——彩灯控制器

    Verilog 层次化文件设计是通过顶层文件 调用的子模块来完成代码功能的实现 这里的顶层文件可以理解为是实体电路中的连线步骤 而子模块就是电路元件 本文采用文本形式编写顶层文件 设置顶层文件先打开文件界面显示所有文件 再选择你要设置为顶层
  • 第四十章、PyQt显示部件:QGraphicsView图形视图和QGraphicsScene图形场景简介及应用案例

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一 概述 Designer中的Graphics View部件是个图形视图部件 对应类为QG
  • 使用Tor遇到的错误

    Tor 在启动期间退出 这可能是您的 torrc 文件存在错误 Tor 或系统其他程序存在问题 或者硬件问题 在您解决此问题并重新启动 Tor 前 Tor 浏览器将不会启动 答 Windows安装Tor后 会在桌面留下文件夹 Tor 删除后
  • 金士顿 DT101 G2 8GU盘量产全过程图解(群联篇)(2)

    首先用芯片无忧或群联量产工具版本选择查看器 APExample getinfo 读出U盘的 MP ver 固件版本 固件日期 版本 控制芯片制造商是群联 芯片型号为ps2250 以便正确选择使用的量产工具 如下图1 这是从群联量产工具版本选
  • CVE-2021-41773漏洞复现

    1 安装debian系统 首先我选择的系统是debian10版本 也可以在别的系统完成复现 我想一个纯净版 所有重新安装了一个系统 安装步骤简单展示一下 1 创建虚拟机 点击下一步 导入镜像 自己选安装的位置以及虚拟机的名称 安装过程需要设
  • sql语句合集大全(个人总结)

    查找emp表 select from emp 查找emp表的sal select a SAL from emp a 查找emp表的ename select a ename from emp a emp表的sal 10 select a SA
  • 六大设计原则--迪米特法则【Low Of Demeter】

    声明 本文内容是从网络书籍整理而来 并非原创 定义 迪米特法则也叫做最少知识原则 Least Knowledge Principle 指一个对象应该对其他对象有最少的了解 通俗的讲 一个类对自己需要耦合或者调用的类应该知道的最少 你类内部是
  • idea打包springboot项目并部署至服务器

    idea打包springboot项目并部署至服务器 Step1 如果项目没有webapp或web目录 Step2 将springboot导成jar包 Step3 将springboot部署至云服务器 Step1 如果项目没有webapp或w
  • GCP: AppEngine(GAE)的使用

    一 基本概念 在全托管式的无服务器平台上构建可扩缩性极强的应用 将应用从零无缝扩容到全球级规模 而不用费心管理底层基础架构 得益于零服务器管理和零配置部署 开发者可以专注于构建出色的应用 省去管理开销 App Engine 支持多种主流开发
  • 使用ab进行并发压测SSL read failed (5) - closing connection错误

    最近在进行并发压测 在c参数特别大的时候 测试过程中出现SSL read failed 5 closing connection错误 研究好久没有找到瓶颈 但在换了一台测试服务器后 这个问题没有出现 所以基本可以确定是测试服务器产生的瓶颈
  • Java中整型数据的进制书写

    问题描述 我觉得这是一个比较有趣的事情 我觉得大多数初学者在编程过程中都不会在源代码里用除了十进制的其它进制写常量 但是当我在做leetcode的 回文数字 一题时 写了个测试样例 以为int 0343可以被识别为343 从而被识别成回文数
  • combo 添加listeners,使用 initComponent、constructor 的区别

    LocationCombo Ext extend Ext form ComboBox initComponent function var config name loactionCombo hiddenName loactionCombo
  • Unity 使用Final IK实现拟真调整物体IK动画

    文章目录 IK部分 需求 何为IK 参考资料 Final IK概述 手部IK效果 IK交互 拿取与双手调整效果 演示视频 IK部分 需求 NPC拿起物体 指定转向放到指定位置 要求动作尽可能自然 贴近真实 何为IK 谈IK之前先讲一下正向运
  • 【计算机网络】数据链路层(二):差错检测和纠正

    帧同步虽然可以区分每个数据帧的起始和结束 但是还没有解决数据正确传输的两方面问题 一 如果有帧出现了错误 二 如果有帧丢失了 这都是数据链路层确保向网络层提供可靠数据传输服务解决的问题 也就是数据链路层的差错控制功能 要实现差错控制功能 就
  • 0、Spring工程构建&Spring快速入门&Spring配置文件详解&注入&Sprint相关API

    1 Spring工程构建 创建工程项目目录文件夹 IDEA选择项目new一个module 配置案例 aop创建 创建并下载完毕后 点击file选择projert 选择按照的jdk版本 output选择当前目录 点击右下方apply 选择fa
  • Android BottomNavigationView的属性设置

    底部导航栏通常是每个item由一个icon和title组成的 然后再控制下是否点击的状态即可 当然也可以使用官方在support包内提供的BottomNavigationView来实现 于简单的需求来说 使用BottomNavigation
  • FPGA数字IC刷题58道Verilog题解代码及视频讲解【FPGA探索者】【同步/异步FIFO】【跨时钟】

    牛客 Verilog 刷题入门篇1 24 进阶篇1 34 题解代码 所有代码均能通过测试 配合视频讲解效果更佳 为避免内容冗余 本文只给出代码 部分题目给出必要说明 很多题目本身出题有些问题 着重理解题目 没必要钻牛角尖 本文作者 FPGA
  • 贪心算法之活动安排问题(填表详解+思路解析)

    贪心算法 总是选择当前看起来最优的选择 局部最优解 得到的结果是一个整体最优解 但是总是选择局部最优解并不总是能得到整体最优解 需要在问题具有 贪心选择性和优化子结构时才成立 贪心选择性 第一次做出贪心选择是正确的 优化子结构 第一次做完贪