【算法】贪心算法解析:基本概念、策略证明与代码例题演示

文章目录

  • 1. 什么是贪心算法?
  • 2. 贪心算法的特点
  • 3. 例题(贪心策略)
    • ① 找零问题
    • ② 最小路径和
    • ③ 背包问题
  • 4. 贪心策略证明


1. 什么是贪心算法?

在学习贪心算法之前,一定要理解的是贪心策略

贪心策略是一种根据具体问题而定的策略:其由局部优先 -> 全局有限,解释如下

  1. 把解决问题的办法分为若干步;
  2. 解决每一步的时候,都选择目前看起来 “最优” 的解法
  3. 最后结果希望得到最优解

2. 贪心算法的特点

贪心算法的特点,可以先看下面的例题再来理解就很轻松了。

  1. 贪心策略提出

    • 贪心策略并没有 标准模板
    • 根据具体题目而提出具体的策略
  2. 贪心策略的正确性

    • 贪心策略得出的结果可能是错误的
    • 正确的贪心策略,需要由我们证明的

3. 例题(贪心策略)

① 找零问题

假设有50元,买了六元的东西,需要找零44元。你有以下序列的纸币[20,10,5,1](每张面值的纸币有无限多个),要求你用最少的纸币张数进行找零。

我们以贪心策略去思考这个问题:要尽可能的选面值大的纸币找零,即为贪心,则
46 = 20+20+5+1。

根据贪心算法最终选择了四张纸币,不难看出该选择就是最佳选择。

在这里插入图片描述

② 最小路径和

有下面一个矩阵,我们处于矩阵左上角,目的地为右下角,希望得到最小路径和。所走的方向只有→和↓两种方向。

在这里插入图片描述

根据贪心策略:因为题目要求最小路径和,则我们每次走当前看到的最小数值的位置,则如下图所示,最终路径和为 1+1+6+2+1=11。而最佳路径显然为1+3+1+1+1=7。

在这里插入图片描述

③ 背包问题

看下面的表格,有以下物品,分别有重量和价值两个指标(重量与价值成正相关),每个商品有无穷多个。
我们有一个 承重为10的背包,希望得到背包装的总价值最高的装法。

物品1物品2物品3
重量651
价值1291

由于这道题对我们装法的影响因素有两个,重量和价值,所以贪心策略可以分多种进行:

  1. 只看重量:为了获得更高价值的东西,我们需要尽可能多的物体,则选择重量更小的物品,则在背包承重范围内我们最终选择的总价为1+1+…+1(n=10)=10
  2. 只看价值:我们尽可能去选择价值高的物品,则最终价格为12+1+1+1+1=16
  3. 看单位重量价值:通过下面的计算,我们可以计算出每个物品的单位重量价值,则贪心策略为选择单位价值最高的物品,最后总价为12+1+1+1+1 = 16

在这里插入图片描述

但实际上,根据三种贪心策略得出的结果都不是最佳选择,最佳策略为,选两个重量为5的物品,总价值为18。


我们会发现,由贪心策略得出的结果,对于例二例三都是错误的,而例一找零问题是正确的,实际上,当我们将找零问题的数据进行改动,如需要找零36元,我们有以下面额的纸币[20, 18, 10, 5, 1],按照之前的贪心策略,最终结果为,一共4张纸币,而最佳策略为选择两张面额18的纸币,一共需两张。


4. 贪心策略证明

我们知道:正确的贪心策略,需要由我们证明的。

那么如何证明呢?
答:我们学习数学时所使用了解过的证明方法通通可行;直接证明、反证、数学归纳…

这里我们就来证明 为什么例一中的找零问题是正确的

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

美畅物联丨科技赋能校车安全:智慧监控管理系统的创新应用

1、背景 1.1应用需求 孩子,作为国家未来的希望之星和民族发展的潜力所在,其安全与健康向来都是社会瞩目的核心要点。校车,作为孩子们日常出行的关键交通载体,其安全性更是时刻牵动着每一个家庭的敏感神经。然而,不可…

JavaSwing项目ATM自动提款机(mysql数据库)+详细报告

目 录 第一章 引言... 1 1.1 设计目的... 1 1.2 相关开发工具介绍... 1 第二章 数据库需求分析... 2 2.1 系统功能分析... 2 2.2 功能模块设计... 2 第三章 数据库概念结构设计... 3 3.1 概念模型... 3 3.2 E-R图... 3 第四章 数据库逻辑结构设计... 4 4.1 关系模型设计... 4 …

Allure报告下载不同格式的文件

支持类型: class AttachmentType(Enum):def __init__(self, mime_type, extension):self.mime_type mime_typeself.extension extensionTEXT ("text/plain", "txt")CSV ("text/csv", "csv")TSV ("text/tab-sep…

【Datawhale X 李宏毅苹果书 AI夏令营】《深度学习详解》Task3 打卡

文章目录 前言学习目标一、优化策略二、模型偏差三、优化问题三、过拟合增加训练集给模型一些限制 四、交叉验证五、不匹配总结 前言 本文是【Datawhale X 李宏毅苹果书 AI夏令营】的Task3学习笔记打卡。 学习目标 李宏毅老师对应视频课程:https://www.bilibili.…

深度强化学习算法(六)(附带MATLAB程序)

深度强化学习(Deep Reinforcement Learning, DRL)结合了深度学习和强化学习的优点,能够处理具有高维状态和动作空间的复杂任务。它的核心思想是利用深度神经网络来逼近强化学习中的策略函数和价值函数,从而提高学习能力和决策效率…

js控制滚轮横向滚动

获取元素,使用一下方法 let box document.getElementById("table_box");box.addEventListener("wheel", function (e) {//这里使用的是 chrom浏览器测试的,有一些Api不太准确 ,请大家注意!!!!let left -e.wheelDelta || e.deltaY / 2;box.sc…

JavaScript中console.log()拼接用逗号和加号的区别

JavaScript中console.log()拼接用逗号和加号的区别 在JavaScript中,console.log()方法可以使用加号()或逗号(,)来拼接字符串。 使用加号()时,将两个字符串连接起来&…

多参数水质分析仪

多参数水质分析仪是一种能够同时测量并分析多种水质参数的仪器。其主要功能包括: 测量多种水质参数:多参数水质分析仪可以同时测量多种水质指标,例如pH值、电导率、溶解氧(DO)、浑浊度、温度等。 高精度测量&#xff…

Android解析异步消息处理机制

文章目录 Android解析异步消息处理机制MessageHandlerMessageQueueLooper Android解析异步消息处理机制 Android中的异步消息处理主要由4个部分组成:Message、Handler、MessageQueue和Looper。其中Message和Handler在上一小节中我们已经接触过了,而Mess…

C语言 | Leetcode C语言题解之第388题文件的最长绝对路径

题目: 题解: #define MAX(a, b) ((a) > (b) ? (a) : (b))int lengthLongestPath(char * input){int n strlen(input);int pos 0;int ans 0;int * level (int *)malloc(sizeof(int) * (n 1));memset(level, 0, sizeof(int) * (n 1));while (po…

第L3周:机器学习-逻辑回归

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目标: 逻辑回归适用于分类问题,主要用于解决二分类或多分类的问题。比如:用户购买某商品的可能性,某病人患有某…

Java项目: 基于SpringBoot+mysql房产销售系统 (含源码+数据库+开题报告+答辩PPT+毕业论文)

一、项目简介 本项目是一套基于SpringBootmysql房产销售系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、功能齐…

MySQL笔记(大斌)

乐观锁和悲观锁是什么? 数据库中的并发控制是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观锁和悲观锁是并发控制主要采用的技术手段。 悲观锁:假定会发生并发冲突,会对操作的数据进行加锁&a…

LLM指令微调实践与分析

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

Http的get请求中的URL中的占位符参数和查询参数有什么区别

Http的GET请求中的URL中的占位符参数和查询参数在功能、位置和用途上存在明显的区别。 占位符参数(Path Variables) 定义与位置:占位符参数是通过URL模板中的{}定义的,它们位于URL的路径(path)部分。例如…

计算机网络 第2章 物理层

文章目录 通信基础基本概念信道的极限容量编码与调制常用的编码方法常用的调制方法 传输介质双绞线同轴电缆光纤以太网对有限传输介质的命名规则无线传输介质物理层接口的特性 物理层设备中继器集线器一些特性 物理层任务:实现相邻节点之间比特(0或1&…

【王树森】RNN模型与NLP应用(7/9):机器翻译与Seq2Seq模型(个人向笔记)

Machine Translation Data 做机器学习任务的第一步都是处理数据,我们首先需要准备机器翻译的数据。由于我们是学习用途,因此拿一个小规模数据集即可:http://www.manythings.org/anki/下面的数据集中:一个英语句子对应多个德语句子…

Transforms使用

文章目录 一、认识Transforms二、ToTensor方法使用三、展示图片的方法 一、认识Transforms transforms 是 torchvision 库中的一个模块,它提供了一系列的图像预处理功能。这些功能可以被用来对图像数据进行变换,以便它们能够被神经网络模型更好地处理。…

24:【stm32】DMA数据搬运

DMA数据搬运 1、DMA的简介2、STM32中的DMA结构3、案列3.1、将数组DataA中的数据搬运到DataB中3.2、ADC扫描模式DMA 1、DMA的简介 DMA是直接存储器存取,它可以提供外设寄存器和存储器,存储器与存储器之间的高速数据的传输,无需CPU的干预&…

24数学建模国赛提供助攻(13——灰色系统理论)

需要资料和助攻的小伙伴可以看文章末尾链接加入企鹅!!!! 点击链接获取资料以及国赛助攻https://qm.qq.com/q/NGl6WD0Bky