贪心算法原理及其应用

2023-11-14

概述

贪心算法应该算是那种“只闻其声不见其人”的算法,我们可能在好多地方都会听到贪心算法这一概念,并且它的算法思想也比较简单就是说算法只保证局部最优,进而达到全局最优。但我们实际编程的过程中用的并不是很多,究其原因可能是贪心算法使用的条件比较苛刻,所要解决的问题必须满足贪心选择性质---所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。

贪心算法

由于贪心算法本身的特殊性,我们在使用贪心算法之前必须要进行证明,保证算法满足贪心选择性质。具体的证明方法无外乎就是通过数学归纳法来进行证明。但大部分人可能并不喜欢枯燥的公式,因而我这里提供一个使用贪心算法的小技巧。由于贪心算法某种程度上算是动态规划算法的特例,使用条件比较苛刻,因而能够用动态规划解决的问题尽量都是用动态规划来进行先解决,如果在用完动态规划之后,提交时发现问题超时,并且进行状态压缩之后仍然超时,此时我们就可以考虑使用贪心算法来进行解决。最后强调一下,我们在使用贪心算法之前,如果要保证解法的绝对正确,一定要对问题进行证明,切记,切记!!

下边我们以区间调度问题为例,来讲一下贪心算法到底该如何取用。

区间调度问题

问题描述:

给你很多形如 [start, end] 的闭区间,请你设计一个算法,算出这些区间中最多有几个互不相交的区间。

举个例子,intvs = [[1,3], [2,4], [3,6]],这些区间最多有 2 个区间互不相交,即 [[1,3], [3,6]],你的算法应该返回 2。注意边界相同并不算相交。

这个问题大眼一看好像有很多贪心策略可供选择,比如我们可以选择区间最短的?或者选择开始最早的?。。。

但是上面几种策略,我们都可以比较容易的举出反例来排除,同时这也是贪心算法的另一个小技巧--虽然好多时候直接证明贪心策略的正确性很难,但是我们可以从反证法入手,对贪心策略进行证伪,排除许多错误的贪心策略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

贪心算法原理及其应用 的相关文章

  • 如何使用固定数量的工作线程实现简单线程

    我正在寻找最简单 最直接的方法来实现以下内容 主程序实例化worker 执行任务的线程 Only n任务可以同时运行 When n已达到 不再有工人 开始直到计数 正在运行的线程回落到下方n 我觉得Executors newFixedThr
  • 在Java中将*s打印为三角形?

    我在 Java 课程中的作业是制作 3 个三角形 一份左对齐 一份右对齐 一份居中 我必须为什么类型的三角形制作一个菜单 然后输入需要多少行 三角形必须看起来像这样 到目前为止 我能够完成左对齐的三角形 但我似乎无法获得其他两个 我尝试用谷
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • 在 Java 中从 SOAPMessage 获取原始 XML

    我已经在 J AX WS 中设置了 SOAP WebServiceProvider 但我无法弄清楚如何从 SOAPMessage 或任何 Node 对象获取原始 XML 下面是我现在获得的代码示例 以及我试图获取 XML 的位置 WebSe
  • 迁移到Java 9或更高版本时是否需要切换到模块?

    我们目前正在从 Java 8 迁移到 Java 11 但是 升级我们的服务并没有我们预期的那么痛苦 我们基本上只需要更改我们的版本号build gradle文件和服务都顺利启动并运行 我们升级了库以及使用这些库的 微 服务 到目前为止没有问
  • 检查 IPv4 地址是否在私有范围内

    在 Python 中 使用 IPy 模块您可以执行以下操作 gt gt gt ip iptype PRIVATE 有没有一个库或简单的方法可以在 Java 中执行相同的操作 似乎不完全是但是InetAddress有一些 isXX 方法 例如
  • Kafka Java Consumer 已关闭

    我刚刚开始使用卡夫卡 我面临着消费者的一个小问题 我用Java写了一个消费者 我收到此异常 IllegalStateException 此消费者已关闭 我在以下行中遇到异常 ConsumerRecords
  • Android volley使用RequestFuture.get()时出现超时异常

    在我的片段中 我尝试使用 TMDB 的开放电影数据库来获取有关 正在播放 电影的详细信息 如果我使用 RequestFuture get time TimeUnit 方法来执行此齐射请求 我总是会收到超时错误 如果我在 Safari 中手动
  • 从 HttpClient 3 转换为 4

    我已经成功地对所有内容进行了更改 但以下内容除外 HttpClient client HttpPost method client new DefaultHttpClient method new HttpPost url InputStr
  • Cucumber DataTable 错误 - io.cucumber.datatable.UndefinedDataTableTypeException:无法将 DataTable 转换为 cucumber.api.DataTable

    尝试使用 cucumber selenium java intelliJ 运行场景 但在其中一个步骤中出现有关 DataTable 的错误 在我开始使用测试运行程序并更改周围的一些内容之前 数据表工作正常并正确转换该步骤的参数 但我就是无法
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • 传递 Android DialogFragment 参数时,onCreateDialog 捆绑参数意外为 null

    我正在尝试使用 DialogFragment 在 Android 中显示一个基本对话框 并使用对话框消息的参数 如中所述StackOverflow线程 https stackoverflow com questions 15459209 p
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反
  • @Embeddable 中的 @GenerateValue

    我已将实体的 id 分离到一个单独的 Embeddable 类中 该实体如下 Entity Table name users public class Users EmbeddedId private Users pk id private
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐

  • Cocos Creator 初识编辑器界面

    编辑器界面的介绍 1 资源管理器 2场景编辑器 3层级管理器 4属性检查器 节点和组件属性的工作区 以及脚步绑定位置 5控制库 预设控件的仓库库 可以通过拖拽方式添加到场景中 并且可以将用户自己的预制资源 prefab 添加到控件库里方便再
  • Jetson Nano介绍

    1 bo1公版介绍 Jetson NanoBO1公版的实物图如下图所示 其中1是TF卡接口 可以进行系统镜像烧写 2是40PIN GPIO扩展接口 3是用来传输数据或使用电源供电的Micro USB接口 4是千兆以太网口 5是USB3 0接
  • netstat命令详解

    概述 最近在学网络编程 用到了netstat命令 觉得非常有用 就把netstat的信息整理一下 以备不时之需 Netstat是控制台命令 是一个监控TCP IP网络的非常有用的工具 它可以显示路由表 实际的网络连接以及每一个网络接口设备的
  • L2-033 简单计算器 - java

    L2 033 简单计算器 时间限制 400 ms 内存限制 64 MB 题目描述 本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器 如上图所示 计算器由两个堆栈组成 一个堆栈 S 1 S 1 S1 存放数字 另一个堆栈
  • 腾讯java运营开发面试题_腾讯运营开发面经

    前言 腾讯面试体验流程非常的正规 不像其他小厂 xjb乱来的 签到 指引 等待 面试 一套下来体验很是不错 而且面试官人也挺好的 面试官搞c 的 我Java 他一个c 的问题都没有问我 很是不错 我说一个不好的事情 我tm迟到了 约的时间是
  • ROS STAGE教程3 (编译源码,自定义Lidar噪声)Ubuntu 18.04 Ubuntu 16.04

    源码地址 https github com rtv Stage git 系统 Ubuntu 18 04 ROS Melodic 噪声生成模块 lasernoise 路径为Stage examples ctrl lasernoise cc i
  • 台式计算机显示连接不可用,电脑莫名其妙无法上网提示“连接不可用”如何解决...

    电脑使用时间久了 会出现各种各样的故障问题 最常见属于网络问题 近期一位用户说电脑莫名其妙无法识别网络 桌面右下角提示 连接不可用 无法上网是一个比较烦人的问题 对于这种情况 可以通过以下几步简单的方法就能解决问题 1 当我们遇到无法识别出
  • Unity 简单游戏编程(1) 开始界面设计

    转自 http blog csdn net qqmcy article details 9330405 using UnityEngine using System Collections public class Script 10 01
  • 斌哥的 Docker 进阶指南

    过去的一年中 关于 Docker 的话题从未断过 而如今 从尝试 Docker 到最终决定使用 Docker 的转化率依然在逐步升高 关于 Docker 的讨论更是有增无减 另一方面 大家的注意力也渐渐从 Docker 是什么 转移到 实践
  • 如何正确控制springboot中bean的加载顺序总结

    1 为什么需要控制加载顺序 springboot遵从约定大于配置的原则 极大程度的解决了配置繁琐的问题 在此基础上 又提供了spi机制 用spring factories可以完成一个小组件的自动装配功能 在一般业务场景 可能你不大关心一个b
  • 数据结构之链表(LinkedList详解)

    文章目录 一 什么是LinkedList 二 LinkedList的使用 三 LinkedList自实现 四 链表实现逆序打印的两种方式 递归和非递归 五 ArrayList和LinkedList有什么区别 一 什么是LinkedList
  • 联想涉密专用计算机密码,清除BIOS密码大全(适用于联想全系列笔记本)

    清除BIOS密码大全 适用于联想全系列笔记本 互联网 发布时间 2008 11 28 22 29 42 作者 佚名 我要评论 昭阳笔记本电脑密码清除方法清除密码的工具 并口环路制作电路图代表1与5 10脚相连 以下同 1 5 102 113
  • 【Selenium4自动化测试(3)】第一个自动化测试用例

    3 1 搭建一个被测系统 为了开展本次课程 我们先搭建一个被测系统 安装vue element admin系统 下载Node https nodejs org en download 按操作步骤一直下一步即可 执行查看版本号 node v
  • Python中f-string的使用

    Python 3 6引入了一个新的格式化字符串的方法 f string formatted string 它可以直接把变量写在字符串中 使得格式化的字符串看起来很直观 下面对f string进行简单介绍 f string的简单使用 name
  • 如何让div中的内容垂直居中

    虽然Div布局已经基本上取代了表格布局 但表格布局和Div布局仍然各有千秋 互有长处 比如表格布局中的垂直居中就是Div布局的一大弱项 不过好在千变万化的CSS可以灵活运用 可以制作出准垂直居中效果 勉强过关 要让div中的内容垂直居中 无
  • 分析模式

    1 找方向 方向是最重要的 如果一开始找错了方向 那么努力多久都是白费 最开始一定要确定有多少方向 然后选择一个最靠谱的 2 过程中反思方向 在过程中一定要经常反思 自己的方向是否正确 是否还有其他方向 尤其是在碰壁之后一定要好好反思 3
  • STL list源码——实现框架、具体实现的详细分段剖析(迭代器的处理、list的实现)、list基本函数总结

    list的底层采用的数据结构是环形的双向链表 相对于vector容器的连续线性空间 list插入或删除要付出的代价比vector小很多 对空间的运用有绝对的精准 一点也不浪费 但是list带有链表天生的弱点 就是不支持随机访问 从内置的迭代
  • 超详细的零基础nodejs树状图~初始化nodejs~模块

    前言 学习任何新知识 最重要的永远都是搭建属于自己的知识框架 随后学习的细碎知识点往框架里面填入 最后形成一棵属于自己的知识大树 本系列的博客专注更新总结好的思维导图 希望可以帮助大家快速理清知识结构 一 初识Node js 内置模块 二
  • Attribute "result" must be declared for element type "select".

    返回结果声明错误 原因 定义返回类型与实际不匹配 修改前
  • 贪心算法原理及其应用

    概述 贪心算法应该算是那种 只闻其声不见其人 的算法 我们可能在好多地方都会听到贪心算法这一概念 并且它的算法思想也比较简单就是说算法只保证局部最优 进而达到全局最优 但我们实际编程的过程中用的并不是很多 究其原因可能是贪心算法使用的条件比
Powered by Hwhale