My Greedy Algorithm(贪心算法)之路(一)

引子:我们之前,其实也遇到过贪心算法,0,1背包就是一个典型的贪心算法问题,那今天我就来开始my-Greedy Algorithm的道路。

什么是贪心算法?

我愿称贪心算法为贪婪+鼠目寸光,贪心算法(Greedy Algorithm)是把求解的问题分成若干个子问题,在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法并不保证总能找到全局最优解,但在许多情况下,它能够产生很好的结果,并且实现简单,效率高,所以是“希望”得到最优解!

贪心的特征

总结以下二点:

1,贪心策略的提出:是没有标准与模板的!即根据问题的具体情况,选择一种贪心策略,以求解每一步的最优解。但是,针对不同的分成子问题的方法,又有不同的策略。

2,贪心策略的正确性:是需要证明的!即证明采用贪心策略能够得到问题的整体最优解。这通常通过数学归纳法、反证法或构造法来证明。

经典问题;

一,找零问题

 给定一个目标金额 N 和一个硬币(或纸币)的集合 C = {c1, c2, ..., cm},其中 ci 是第 i 种硬币(或纸币)的面值。目标是找到一种使用这些硬币(或纸币)组成目标金额 N 的方式,使得使用的硬币(或纸币)数量最少

证明:策略的正确性

假设有以下零钱:{20,10,5,1}

那我们假设最优解对应的个数是{A,B,C,D},我们贪心得到的个数为{a,b,c,d}.

因为20是10的二倍,那B就有三情况,B>2,B=2,B<2,因为B>=2时,那变成了A,所以,B<=1,同理,c<=1,d<=4.

故a>=A,因为a<A的话,那剩余的数达不到20,10+5+4=19(注意是在最优解的情况下)。

因为a>A的话,那b可能>1,c可能>1,d可能>4,故a=A,b=B,c=C,d=D

二,背包问题

定一个背包,背包有一个最大承重限制,以及一组物品,每个物品都有自己的重量和价值。要求选择部分物品装入背包,使得背包中的物品总价值最大,同时不超过背包的最大承重限制。

解题思路
  1. 排序:首先,将所有物品按照它们的单位价值(即价值除以重量)从高到低进行排序。单位价值越高的物品,我们越希望尽可能多地装入背包。

  2. 贪心选择:从单位价值最高的物品开始,尝试将其装入背包,直到达到背包的容量限制或该物品被完全装入背包。

  3. 计算总价值:重复上述过程,直到所有物品都被考虑过,或者背包已满。最后,计算背包中所有物品的总价值。

证明:策略的正确性

假设:存在一种不同于上述贪心策略的方法,能够产生更高的总价值,同时不超过背包的最大承重限制。

步骤1:考虑这种假设下的最优解,它必然包含了一系列的物品选择及其对应的重量分配(可能是部分分配)。

步骤2:假设在这个最优解中,存在某个物品A,其单位价值并不是当前未被选中的物品中单位价值最高的。那么,我们可以找到至少一个未被选中的物品B,其单位价值高于物品A

步骤3:由于背包问题允许物品分割,我们可以尝试将物品A从背包中完全移除(如果它是部分添加的,则移除其已添加的部分),并用相同重量的物品B来替代。由于物品B的单位价值更高,这种替换将增加背包中的总价值,而不改变背包的总重量。

步骤4:重复上述步骤,对于最优解中所有单位价值不是最高的物品,都尝试用单位价值更高的物品来替换。这样,我们可以构造出一个新的解,它的总价值高于原始的最优解,这与我们的初始假设(原始解是最优的)相矛盾。

结论:因此,我们的假设是错误的,即不存在一种不同于贪心策略的方法能够产生更高的总价值。所以,贪心策略(按单位价值从高到低排序,并尽可能多地装入背包)是正确的。

注意

  • 这个证明依赖于背包问题允许物品分割的特性。在不允许分割的0-1背包问题中,贪心策略并不总是有效的。
  • 证明中的“替换”操作是基于物品可以分割的假设,这意味着我们可以选择性地添加或移除物品的部分重量,而不是整个物品。
  • 这个证明也说明了贪心算法在解决分数背包问题时的有效性和最优性。

三,最短路径问题

贪心算法在求解最短路径问题时,通常采取的策略是逐步扩展已知的最短路径,每次选择当前可达的、且距离起点最近的顶点进行扩展。这种策略基于贪心选择性质,即每一步都选择当前看来最优的解(即距离起点最近的可达顶点),并期望通过这些局部最优选择达到全局最优解。

最短路径问题具有最优子结构性质,这是采用贪心算法解决问题的关键特征。该性质描述为:如果P(i,j)={Vi...Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必定是从k到s的最短路径。这一性质保证了在求解最短路径时,可以局部地做出最优选择,而这些局部最优选择最终能组合成全局最优解。

还有很多的例子与问题,我们下次从题目入手!,感谢大家与我一起进入贪心算法的课程,下次,我也会开始优选算法的道路!

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

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

相关文章

在电子表格中对多列数据去重

一、数据展示 二、代码 Sub 选中区域数据去重()Dim arr()Dim c, d, id Selection.Counti 0For Each c In SelectionIf c.Value <> "" ThenReDim Preserve arr(0 To i)arr(i) c.Valuei i 1End IfNextarr 一维去重(arr)i 0For Each c In Range("O2&…

当需要对多个表进行联合更新操作时,怎样确保数据的一致性?

文章目录 一、问题分析二、解决方案三、示例代码&#xff08;以 MySQL 为例&#xff09;四、加锁机制示例五、测试和验证六、总结 在数据库管理中&#xff0c;经常会遇到需要对多个表进行联合更新的情况。这种操作带来了一定的复杂性&#xff0c;因为要确保在整个更新过程中数据…

Charles拦截发送数据包-cnblog

Charles拦截发送数据包 打开允许断点 右键要打断点的数据包&#xff0c;打断点 重新发请求进入断点模式 修改完毕后发送

集成学习(三)GBDT 梯度提升树

前面学习了&#xff1a;集成学习&#xff08;二&#xff09;Boosting-CSDN博客 梯度提升树&#xff1a;GBDT-Gradient Boosting Decision Tree 一、介绍 作为当代众多经典算法的基础&#xff0c;GBDT的求解过程可谓十分精妙&#xff0c;它不仅开创性地舍弃了使用原始标签进行…

浪潮信息携手算力企业为华东产业集群布局提供高质量算力支撑

随着信息技术的飞速发展&#xff0c;算力已成为推动数字经济发展的核心力量。近日&#xff0c;浪潮信息与五家领先的算力运营公司在南京正式签署战略合作协议&#xff0c;共同加速华东地区智算基础设施布局&#xff0c;为区域经济发展注入新动力。 进击的算力 江苏持续加码智算…

论文回顾 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法

论文速览 | CVPR 2021 | How to Calibrate Your Event Camera | 基于图像重建的事件相机校准新方法 1 引言 在计算机视觉和机器人领域,相机校准一直是一个基础而又重要的问题。传统的相机校准方法主要依赖于从已知校准图案中提取角点,然后通过优化算法求解相机的内参和外参。这…

创新配置,秒级采集,火爆短视频评论抓取

快速采集评论数据的好处 快速采集评论数据是在当今数字信息时代的市场趋势分析和用户反馈分析中至关重要的环节。通过准确获取并分析大量用户评论&#xff0c;您将能够更好地了解消费者的需求、情感和偏好。集蜂云采集平台提供了一种简单配置的方法&#xff0c;使您能够快速采…

docker部署mycat,连接上面一篇的一主二从mysql

一、docker下载mycat镜像 查看安装结果 这个名称太长&#xff0c;在安装容器时不方便操作&#xff0c;设置标签为mycat docker tag longhronshens/mycat-docker mycat 二、安装容器 先安装一个&#xff0c;主要目的是获得配置文件 docker run -it -d --name mycat -p 8066:…

ubuntu设置开启自动挂载sftp

1. 前言 与其说 ubuntu 开启自动挂载 sftp, 更确切的说应该是 nautilus (ubuntu上默认的文件管理器) 开机自动挂载 sftp。 因为 这里即使选择永远记住&#xff0c;开机也不会自动挂载 sftp 2.设置方法 gnome-session-properties #开机只启动设置命令设置 gio mount sftp…

智慧文旅(景区)解决方案PPT(42页)

智慧文旅解决方案摘要 行业分析中国旅游业正经历消费大众化、需求品质化、发展全域化和产业现代化的发展趋势。《“十三五”旅游业发展规划》的发布&#xff0c;以及文化和旅游部的设立&#xff0c;标志着旅游业的信息化和智能化建设成为国家战略。2018年推出的旅游行业安全防范…

「技术分享」FDL对接金蝶云API取数

很多企业的ERP系统都在用金蝶云星空&#xff0c;金蝶云星空API是IT人员获取数据的重要来源&#xff0c; 常常用来生成定制化报表&#xff0c;进行数据分析&#xff0c;或是将金蝶云的数据与OA系统、BI工具集成。 通常情况下&#xff0c;IT人员需要使用Python、Java等语言编写脚…

从“钓”到“管”:EasyCVR一体化视频解决方案助力水域安全管理

一、背景 随着城市化进程的加快&#xff0c;越来越多的市民热衷于钓鱼活动。钓鱼活动在带来乐趣的同时&#xff0c;也伴随着一定的安全隐患。尤其是在一些危险水域&#xff0c;也经常出现垂钓者的身影&#xff0c;非法垂钓&#xff0c;这给城市管理带来了不小的阻力。传统的人…

STMF4 硬件IIC(天空星开发板)

前言&#xff1a;笔记参考立创开发文档&#xff0c;连接放在最后 #IIC概念介绍 #IIC介绍 IIC通信协议&#xff0c;一种常见的串行通信协议&#xff0c;英文全程是 Inter-Integrated Circuit 使用这种通信方式的模块&#xff0c;通常有SCL&#xff08;Serial Clock Line&…

SQL-DCL(三)

一.DCL介绍 DCL英文全称是Data Control Language(数据库控制语言),用来管理数据库 用户,控制数据库的访问权限。 二.两个方面 1.数据库可以由那些用户访问 2.可以访问那些内容 三.DCL-管理用户 1.查询用户 USE mysql SELECT * FROM user 2.创建用户 CREATE USER…

Redis---10---SpringBoot集成Redis

SpringBoot集成Redis 总体概述jedis-lettuce-RedisTemplate三者的联系 本地Java连接Redis常见问题&#xff0c;注意 bind配置请注释掉​ 保护模式设置为no​ Linux系统的防火墙设置​ redis服务器的IP地址和密码是否正确​ 忘记写访问redis的服务端口号和auth密码集成Jedis …

HTML(26)——平面转换-旋转-多重转换-缩放

旋转 属性&#xff1a;transform:rotate(旋转角度) 角度的单位是deg。 取值为正&#xff0c;顺时针旋转取值为负&#xff0c;逆时针旋转 默认情况下&#xff0c;旋转的原点是盒子中心点 改变旋转的原点可以使用属性:transform-origin:水平原点位置 垂直原点位置 取值&a…

Vue表单输入绑定v-model

表单输入绑定 在前端处理表单时&#xff0c;我们常常需要将表单输入框的内容同步给Javascript中相应的变量。手动连接绑定和更改事件监听器可能会很麻&#xff0c;v-model 指令帮我们简化了这一步骤。 <template><h3>表单输入绑定</h3><hr> <inpu…

【分布式系统】ELK 企业级日志分析系统

目录 一.ELK概述 1.简介 1.1.可以添加的其他组件 1.2.filebeat 结合 logstash 带来好处 2.为什么使用ELK 3.完整日志系统基本特征 4.工作原理 二.部署ELK日志分析系统 1.初始化环境 2.完成JAVA部署 三. ELK Elasticsearch 集群部署 1.安装 2.修改配置文件 3.es 性…

OpenAI突然停止中国API使用,出海SaaS产品如何化挑战为机遇?

2023年是AI爆发的年代&#xff0c;人工智能带来的信息裂变刷新了整个SaaS行业。在这个AI引领的时代&#xff0c;我们不应该单纯依赖工具本身&#xff0c;而是要理解如何将这些AI功能与行业相结合。 然而&#xff0c;上周OpenAI宣布禁止对中国提供API服务&#xff0c;有一些用户…