贪心算法介绍

devtools/2024/10/17 16:43:11/

算法>贪心算法简介

与其说是算法>贪心算法,不如说是贪心策略,解决问题的策略:从局部最优解推出全局最优解。

  • 把解决问题的过程分为若干步
  • 在解决每一步的时候,都选择当前最优的解法
  • 希望得到全局最优解

例一:找零问题

我们手里有若干的纸币,1块、5块、10块、20块,现在用最少的张数,完成找零工作。

每次选择都选择当前能选择的最大面额
在这里插入图片描述

正确性证明:

在这里插入图片描述

这里能算出:

  • C <= 1,因为2张10元面值可以替换成1张20元面值
  • B <= 1,2张5元面值可以替换成1张10元面值
  • A <= 4,5张1元面值可以替换成1张5元面值

要证明贪心策略正确,需证明a == A && b == B && c == C && d == D

  • d >= D,因为每次都选择最大的,但是d > D不可能,因为后面的凑不出20块,最多4 + 5 + 10 = 19

    所以d == D

之后的a、b、c都是同理

这也是个面试题,之前遇到过:

为什么人民币有1块、5块、10块、20块、50块这些面值,为什么要这样?

例二:最小路径和

从左上角到右下角,每次只能走一步,向下或者向右,求最少的路径和。

在这里插入图片描述

每一步都选择当前最小的:

在这里插入图片描述

这里通过贪心,得到的结果并不是正确的

例三:背包问题

假设每个物品有无穷多个,此时所能装的最大价值是多少
在这里插入图片描述
这里有三个条件:

  • 背包容量
  • 物品体积
  • 物品价值
  1. 贪心策略1: 选择体积最小的,就装最小的 1 * 8 = 8
  2. 贪心策略2: 选择价值最大的10 + 1 + 1 + 1 = 13
  3. 贪心策略3: 单位体积(价值w / 体积v)的价值最大10 + 1 + 1 + 1 = 13

此时的三种贪心策略,都是错的…


通过上述三个例子,算法>贪心算法即只考虑眼前最大利益,从而希望得到全局最大利益的。

算法>贪心算法特点:

  • 贪心策略的提出,每次的标准都是不一样的
  • 贪心策略不一定正确,而正确的贪心策略,需要证明(证明稍微复杂)

贪心策略很多很多,前期学习将重点放在贪心策略上,将此策略当作经验吸收即可;

学到一定程度,可以尝试深究策略正确性的证明。


http://www.ppmy.cn/devtools/119592.html

相关文章

Linux【基础指令汇总】

目录 Linux命令的特点 1、文件管理 ls命令 cp命令 mkdir命令 mv命令 pwd命令 2、文档编辑 cat命令 echo命令 rm命令 tail命令 rmdir命令 3、系统管理 rpm命令 find命令 startx命令 uname命令 vmstat命令 4、磁盘管理 df命令 fdisk命令 lsblk命令 hdpar…

【Ubuntu】DNS设置不生效/重启被重置

/etc/resolv.conf 是一个链接&#xff0c;指向/run/systemd/resolve/stub-resolv.conf &#xff0c; ubuntuVM-4-13-ubuntu:/run/systemd/resolve$ ll /etc/resolv.conf lrwxrwxrwx 1 root root 39 Sep 30 14:40 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.…

1、深入理解Redis线程模型

文章目录 一、Redis是什么&#xff1f;有什么用&#xff1f;1、Redis是什么&#xff1f;2、2024年的Redis是什么样的&#xff1f; 二、Redis到底是单线程还是多线程&#xff1f;三、Redis如何保证指令原子性1、复合指令2、Redis事务3、Pipeline4、lua脚本5、Redis Function6、R…

Spring系列 AOP实现过程

文章目录 实现原理EnableAspectJAutoProxyAnnotationAwareAspectJAutoProxyCreator 代理创建过程wrapIfNecessarygetAdvicesAndAdvisorsForBeanfindCandidateAdvisorsfindAdvisorsThatCanApply createProxy AspectJ注解处理代理调用过程 实现原理 本文源码基于spring-aop-5.3.…

针对GNU/Linux synology_apollolake_418play下的删除数据脚本

1、目的 一个在 Linux 下的 Bash 脚本&#xff0c;用于每三年删除 /volume1 目录下的文件以及子文件夹下的文件。这个脚本假设你已经有了判断时间间隔是否为三年的方法&#xff08;比如上述提到的通过记录上一次执行时间并进行比较的方法&#xff09;。 2、操作 1&#xff09…

Python从入门到高手4.1节-掌握条件控制语句

目录 4.1.1 理解条件控制 4.1.2 if, elif, else 4.1.3 条件表达式 4.1.4 条件控制可以嵌套 4.1.5 if语句的三元运算 4.1.6 国庆节快乐 4.1.1 理解条件控制 在日常生活中&#xff0c;我们常喜欢说如果, "如果怎么样&#xff0c;那么就会怎么样"。"如果&qu…

基于单片机的催眠电路控制系统

** 文章目录 前言一 概要功能设计设计思路 软件设计效果图 程序文章目录 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主…

如何给一张图像判断失真类型?

判断失真类型 类型 类型 模糊失真&#xff1a; 表现&#xff1a;图像细节不清晰&#xff0c;边缘模糊&#xff0c;整体看起来像是被一层薄雾笼罩。 原因&#xff1a;可能是由对焦不准确、相机抖动、快门速度过慢或景深过浅等原因造成。 判断方法&#xff1a;观察图像中的细节是…