贪心算法详解

文章目录

  • 前言
  • 一、什么是贪心算法
  • 二、贪心算法的特点
    • 1.贪心策略的提出
    • 2.贪心策略的正确性
  • 三、学习贪心算法的方向
  • 总结


前言

在本次文章中我们将会详细介绍贪心算法的相关内容

一、什么是贪心算法

贪心算法:在解决问题时,每一步都选择最优解,从而实现整体最优的过程。总是做出在当前看来最好的选择

我们再来细分一下
🏉🏉.把求解问题的过程分为若干步骤。
🏉🏉.每个步骤都选择当前最优的解法
🏉🏉.最终我们希望得到全局最优解(注意希望)

我们来看几个例子进一步理解一下:
🌟 🌟 .找零问题

我们手中有无限张20,10,5,1元纸币。顾客通过购买商品,我们需要给顾客找零钱,问我们可以给顾客的最少的纸币张数??

比如顾客给了我们50元,购买了6元的商品,我们需要给顾客46元,需要给他的最少张数是多少。这就是我们求解的问题
🎁我们分为若干步骤,就是一张一张的找给顾客
🎁贪心算法的关键就是每一步做出最优的选择
🎁我们需要给他46元,最优就是给他一张20元的,现在还剩下26元,再给他一张20元的
🎁现在还剩下6元,最优的就是给他一张5元的
🎁现在还剩下1元,最优的就是给他一张1元的
🎁最终我们求得最少需要4张纸币就可以完成找零
🌟 🌟 .最小路径和

有一个二维数组,每个数组都有一个整数,现在我们从数组左上角移动到数组右下角,我们只能向右或者向下走,问我们经过的路径上所有整数加起来最小的路径和

假设二维数组arr如图所示

在这里插入图片描述
🎁我们分为若干步,就是一步步的走
🎁贪心算法的关键就是每一步做出最优的选择
🎁我们首先位于arr[0][0]位置,右边值为2,下边值为1,下边的值比较小,最优解应该往下走,到达arr[0][1]位置。
🎁我们现在位于arr[0][1]位置,右边值为1,下边值为7,右边值小于下边值,最优解应该往右走,到达arr[1][1]位置。
🎁同理,我们最终到达arr[2][2]位置
此时贪心策略的路径如图所示
在这里插入图片描述

二、贪心算法的特点

1.贪心策略的提出

贪心策略是没有标准和模板的,每一道题的策略都不同

2.贪心策略的正确性

我们发现在最小路径和这个问题上我们通过贪心策略求得的结果并不是正确的答案,正确的如下所示
在这里插入图片描述

贪心策略可能是有错误的,正确的贪心算法是需要相关的证明的

证明的方法就是用我们数学中所学到的所有证明方法

三、学习贪心算法的方向

我们仅仅需要关注贪心正确的策略就可以

对于初学者来说,遇到不会的题目是很正常的,我们要把心态放平,重点放在贪心策略上,当成经验吸收

相关的证明方法可以了解也可以不了解。

总结

以上就是今天要讲的内容,本文仅仅详细介绍了贪心算法,希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~ 😘 😘 😘 😘

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

K8s(九)持久化存储PV与PVC

PV和PVC PV 和 PVC 之间的关系是一种动态的供需匹配关系。PVC 表示应用程序对持久化存储的需求,而 PV 表示可用的持久化存储资源。Kubernetes 控制平面会根据 PVC 的需求来选择和绑定合适的 PV,将其挂载到应用程序的 Pod 中,从而使应用程序可…

Mock大法:Fake it till u make it!

在单元测试时,我们希望测试环境尽可能单纯、可控。因此我们不希望依赖于用户输入,不希望连接无法独占的数据库或者第三方微服务等。这时候,我们需要通 mock 来模拟出这些外部接口。mock 可能是单元测试中最核心的技术。 无论是 unittest 还是…

【DeepLearning-1】 注意力机制(Attention Mechanism)

1.1注意力机制的基本原理: 计算注意力权重: 注意力权重是通过计算输入数据中各个部分之间的相关性来得到的。这些权重表示在给定上下文下,数据的某个部分相对于其他部分的重要性。 加权求和: 使用这些注意力权重对输入数据进行加权…

Flink(十五)【Flink SQL Connector、savepoint、CateLog、Table API】

前言 今天一天争取搞完最后这一部分,学完赶紧把 Kafka 和 Flume 学完,就要开始做实时数仓了。据说是应届生得把实时数仓搞个 80%~90% 才能差不多找个工作,太牛马了。 1、常用 Connector 读写 之前我们已经用过了一些简单的内置连接器&#x…

用ChatGPT教学、科研!大学与OpenAI合作

亚利桑那州立大学(简称“ASU”)在官网宣布与OpenAI达成技术合作。从2024年2月份开始,为所有学生提供ChatGPT企业版访问权限,主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品,AS…

禅道的下载使用

文章目录 禅道的下载下载安装包 http://www.zentao.net/安装导南 禅道的使用创建用户产品经理将人员添加进禅道查看权限、产品经理使用禅道添加产品添加产品模块关联用例(测试主管)执行测试用例转bug 泳道图 禅道的下载 下载安装包 http://www.zentao.n…

电脑无法开机?重装系统教程在这!超详细

#电脑无法开机,怎么重装系统# 前言 本教程适合比较新的Windows电脑硬件。硬件的新旧并没有一个清晰的标准去判定,毕竟有些厂家生产的主板支持UEFI和Legacy两种引导方式,但部分厂家生产的硬件所使用的Bios并不支持Legacy,所以只能用UEFI引导来安装系统。 所以要使用哪种引…

容器原理之Union FS

一、前言 1.1 什么是 UnionFS 联合文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories in…

华为OD机试之阿里巴巴找黄金宝箱(IV) C++

题目背景 贫如洗的椎夫阿里巴巴在去砍柴的路上,无意中发现了强盗集团的藏宝地,藏宝地有编号从0-N的箱子,每个箱子上面有一人数字,箱子排列成一个环,编号最大的箱子的下一个是编号为0的箱子。请输出每个箱了贴的数字之…

【记一次线上事故的排查思路】- CPU飙升问题排查

问题描述 由于项目排期较紧,临时从其他组调来三个开发资源帮我一起做项目,难免上线的时候大家的需求一块上线。 问题来了,上线三天后,线上CPU总是莫名奇妙的突然飙升,飙升后CPU并未降下来,而是一直处在高点…

解密POM:提升自动化脚本稳定性和开发效率的正确姿势!

Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class。class的内容主要包括属性和方法,属性不难理解,就是这个页面中的元素对象,比如输入用户名的输入框,输入登陆密码的输入框、登陆按钮、这个页…

《WebKit 技术内幕》学习之七(3): 渲染基础

3 渲染方式 3.1 绘图上下文(GraphicsContext) 上面介绍了WebKit的内部表示结构,RenderObject对象知道如何绘制自己,但是,问题是RenderObject对象用什么来绘制内容呢?在WebKit中,绘图操作被定…

【Leetcode】2765. 最长交替子数组

文章目录 题目思路代码结果 题目 2765. 最长交替子数组 题目:给你一个下标从 0 开始的整数数组 nums 。如果 nums 中长度为 m 的子数组 s 满足以下条件,我们称它是一个 交替子数组 : m 大于 1 。 s1 s0 1 。 下标从 0 开始的子数组 s 与…

Vue中$watch()方法和watch属性的区别

vue中$watch()和watch属性都是监听值的变化的,是同一个作用,但是有两个不同写法。 用法一: //注意:这种方法是监听不到对象的变化的。 this.$watch((newVal,oldVal)>{ }) 用法二: watch:{xxx:(newVal,oldVal)>…

SpringCloud Aliba-Seata【上】-从入门到学废【7】

目录 🧂.Seata是什么 🌭2.Seata术语表 🥓3.处理过程 🧈4.下载 🍿5.修改相关配置 🥞6.启动seata 1.Seata是什么 Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能…

硅像素传感器文献调研(八)

1977 平面单场限环器件的理论与击穿电压 摘要 使用一个或多个浮置场限制环减少了平面器件中结曲率对击穿电压的不利影响。虽然这已经知道了一段时间,但还没有一种方法可以准确地预测使用场环可以实现的改善量。本文提出了一种计算机算法,它使得有可能进…

残差连接是什么意思

残差连接是深度神经网络中一种用于缓解梯度消失问题的技术。它的核心思想是通过将网络的输入直接传递到网络的输出,从而构建了一条直达路径,使得梯度更容易通过整个网络传播。这有助于在训练深层网络时避免梯度消失或梯度爆炸的问题。 在残差连接中&…

Linux 一键部署grafana

grafana 前言 Grafana 是一款开源的数据可视化和监控仪表盘工具。它提供了丰富的数据查询、可视化和报警功能,可用于实时监控、数据分析和故障排除等领域。 通过 Grafana,您可以连接到各种不同的数据源,包括时序数据库(如 Prometheus、InfluxDB)和关系型数据库(如 MySQ…

题记(26)--Sharing(链表公共后缀)

目录 一、题目内容 二、输入描述 三、输出描述 四、输入输出示例 五、完整C语言代码 一、题目内容 To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if…

Mybatis----缓存

MyBatis是一个流行的Java持久化框架,它提供了一个灵活的缓存机制来提高查询性能。 MyBatis的缓存机制主要分为一级缓存和二级缓存。 一级缓存是指在同一个SqlSession中,查询结果会被缓存起来,当再次执行同样的查询时,直接从缓存中…