五分钟了解一下什么是「贪心算法 」‼️‼️‼️

news2024/11/15 16:36:39

五分钟了解一下什么是「贪心算法 」‼️‼️‼️

1 概念

贪心的意思在于在作出选择时,每次都要选择对自身最为有利的结果,保证自身利益的最大化。贪心算法就是利用这种贪心思想而得出一种算法。

贪心算法作为五大算法之一,在数据结构中的应用十分广泛。例如:在求最小生成树的 Prim 算法中,挑选的顶点是候选边中权值最小的边的一个端点。在 Kruskal 算法中,每次选取权值最小的边加入集合。在构造霍夫曼树的过程中也是每次选择最小权值的节点构造二叉树。这种每次在执行子问题的求解时,总是选择当前最优的情形,恰好符合贪心的含义。

贪心算法可以简单描述为:大事化小,小事化了。对于一个较大的问题,通过找到与子问题的重叠,把复杂的问题划分为多个小问题。并且对于每个子问题的解进行选择,找出最优值,进行处理,再找出最优值,再处理。也就是说贪心算法是一种在每一步选择中都采取在当前状态下最好或最优的选择,从而希望得到结果是最好或最优的算法。

贪心算法在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

2 算法流程

(1)建立数学模型来描述问题。  (2)把求解的问题分成若干个子问题。  (3)对每一子问题求解,得到子问题的局部最优解。  (4)把子问题的局部最优解合成原来问题的一个解。

3 伪代码

从问题的某一初始解出发
    while (能朝给定总目标前进一步) 
        do
            选择当前最优解作为可行解的一个解元素;
    由所有解元素组合成问题的一个可行解。

4 示例

题目描述:

小明手中有 1,5,10,50,100 五种面额的纸币,每种纸币对应张数分别为 5,2,2,3,5 张。若小明需要支付 456 元,则需要多少张纸币?

在这里插入图片描述

题目分析

(1)建立数学模型  设小明每次选择纸币面额为 Xi ,需要的纸币张数为 n 张,剩余待支付金额为 V ,则有: X1 + X2 + … + Xn = 456. (2)问题拆分为子问题  小明选择纸币进行支付的过程,可以划分为n个子问题:即每个子问题对应为: 在未超过456的前提下,在剩余的纸币中选择一张纸币。 (3)制定贪心策略,求解子问题

制定的贪心策略为:在允许的条件下选择面额最大的纸币。则整个求解过程如下:

  • 选取面值为 100 的纸币,则 X1 = 100, V = 456 - 100 = 356;
  • 继续选取面值为 100 的纸币,则 X2 = 100, V = 356 - 100 = 256;
  • 继续选取面值为 100 的纸币,则 X3 = 100, V = 256 - 100 = 156;
  • 继续选取面值为 100 的纸币,则 X4 = 100, V = 156 - 100 = 56;
  • 选取面值为 50 的纸币,则 X5 = 50, V = 56 - 50 = 6;
  • 选取面值为 5 的纸币,则 X6 = 5, V = 6 - 5 = 1;
  • 选取面值为 1 的纸币,则 X7 = 1, V = 1 - 1 = 0;求解结束

(4)将所有解元素合并为原问题的解

小明需要支付的纸币张数为 7 张,其中面值 100 元的 4 张,50 元 1 张,5 元 1 张,1 元 1 张。

代码实现

const int N = 5; 
int Count[N] = {5,2,2,3,5};//每一张纸币的数量 
int Value[N] = {1,5,10,50,100};
int solve(int money) {
    int num = 0;
    for(int i = N-1;i>=0;i--) {
        int c = min(money/Value[i],Count[i]);//每一个所需要的张数 
        money = money-c*Value[i];
        num += c;//总张数 
    }
    if(money>0) num=-1;
    return num;
}

华为OD算法/大厂面试高频题算法练习冲刺训练

  • 华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!

  • 课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化

  • 每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!

  • 60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁

  • 可上全网独家的欧弟OJ系统练习华子OD、大厂真题

  • 可查看链接 OD算法冲刺训练课程表 & OD真题汇总(持续更新)

  • 绿色聊天软件戳 od1336了解更多

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

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

相关文章

如何进行lidar和imu的外参标定

我们使用的lidar_align这个算法来进行标定。 1.下载源码 在ros工作空间下的src文件夹下运行这个命令。 git clone https://github.com/ethz-asl/lidar_align.gitsudo apt-get install libnlopt-devcd ..catkin_make 这里编译的时候会爆一些错误。我遇到的是: 这…

渗透测试成功的8个关键

渗透测试 (penetration test)并没有一个标准的定义,国外一些安全组织达成共识的通用说法是:渗透测试是通过模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析&#x…

考试中心|学习资料|学习情况|纯净无广|在线组卷刷题

土著刷题Plus专业版v1.2版本已全面对其个人版功能,完全满足学员培训/刷题考察全套流程,提供完整的服务流程。接下来将主要介绍一下这一版的新功能 考试中心 满足培训机构/刷题组织者考察刷题用户的管理需求,【围绕考试展开】,提供…

SQLite数据库使用时碰到的问题

背景 1、最近使用sqlite数据库,因为轻量,所以,不需要特别的部署服务器环境。 开发的平台使用的是Qt 碰到的问题 1、我在向数据库中插入字段的时候,少写了一个字段的内容,报这个错误 QSqlError("", "…

火焰原子吸收光谱法、容量法和电感耦合等离子体发射光谱法

声明 本文是学习GB-T 1871.5-2022 磷矿石和磷精矿中氧化镁含量的测定 火焰原子吸收光谱法、容量法和电感耦合等离子体发射光谱法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件描述了在磷矿石和磷精矿中测定氧化镁含量的火焰原子吸收…

史上最全 结构型模式之 代理 适配器 装饰者 模式

创建型设计模式 原型模式 建造者模式 创建者模式对比_软工菜鸡的博客-CSDN博客 5,结构型模式 day03 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组…

大模型部署手记(8)LLaMa2+Windows+llama.cpp+英文文本补齐

1.简介: 组织机构:Meta(Facebook) 代码仓:https://github.com/facebookresearch/llama 模型:llama-2-7b 下载:使用download.sh下载 硬件环境:暗影精灵7Plus Windows版本&#…

制药企业纯化水设备的应用及维护:设备健康管理软件的关键作用

纯化水设备在制药企业中扮演着重要角色,为生产高纯度水提供支持。然而,为了确保设备的可靠性和稳定性,有效的维护和管理至关重要。设备健康管理软件PreMaint成为实现这一目标的关键工具。本文将介绍PreMaint软件如何优化纯化水设备的维护&…

Qt_C++读写FM1208 CPU卡源码、支持windows、Linux系统

本示例使用的发卡器&#xff1a; Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com) #include "mainwindow.h" #include "./ui_mainwindow.h" #include <QDebug> #include "QLibrary" #include "Q…

政府部门搭建的数字化工具平台有哪些?

政府部门搭建的数字化工具平台多样且广泛&#xff0c;旨在提高行政效能、优化公共服务和促进政务创新。以下是一些常见的数字化工具平台及其功能的详细介绍。 一、电子政务平台 1. 政务门户网站&#xff1a;作为政府对外的窗口&#xff0c;提供政府机构、政策信息、在线办事、…

Redis 的过期键 | Navicat 技术干货

Redis 是一种高性能的内存数据存储&#xff0c;以其速度和多功能性而闻名。其中一个有用的特性是为键设置过期时间的功能。在 Redis 中&#xff0c;为键设置过期时间对于管理数据和确保过时或临时数据自动从数据库中删除是至关重要的。在本文中&#xff0c;我们将探讨在 redis-…

SpringBoot整合DataWay配置前端查询

Dataway介绍 Dataway 是基于 DataQL 服务聚合能力&#xff0c;为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过 Dataway 提供的 UI 界面完成。UI 会以 Jar 包方式提供并集成到应用中并和应…

Springboot学习笔记——3

Springboot学习笔记——3 一、热部署1.1、手动启动热部署1.2、自动启动热部署1.3、热部署范围配置1.4、关闭热部署 二、配置高级2.1、第三方bean属性绑定2.2、松散绑定2.3、常用计量单位应用2.4、bean属性校验2.5、进制数据转换规则 三、测试3.1、加载测试专用属性3.2、加载测试…

mysql面试题32:MySQL数据库服务器性能分析的方法命令有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL数据库服务器性能分析的方法命令有哪些? MySQL数据库服务器性能分析的方法和命令有以下几种: EXPLAIN命令:用于分析查询语句的执行计划,…

基于springboot实现在线动漫信息交流分享平台项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线动漫信息交流分享平台演示 摘要 随着社会互联网技术的快速发展&#xff0c;每个行业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于在线动漫信息平台当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#x…

结婚请帖邀请函制作全攻略,一分钟学会

结婚是人生的重要时刻之一&#xff0c;而一份精美的结婚请帖邀请函则是新人向亲友们发出完美邀请的必备品。为了让你轻松制作出令人惊艳的结婚请帖邀请函&#xff0c;我们为你推荐一个简单易用的在线制作平台——乔拓云微传单平台。只需一分钟&#xff0c;你就能轻松学会&#…

城市项目招商创业园区供需特产公益小程序开源版开发

城市项目招商创业园区供需特产公益小程序开源版开发 城市项目招商创业园区供需特产公益小程序的功能主要包括以下几个方面&#xff1a; 项目招商&#xff1a;提供城市项目招商信息&#xff0c;包括项目介绍、投资额、回报率等详细信息&#xff0c;方便投资者了解项目情况&#…

云数据库(林子雨慕课课程)

文章目录 6.云数据库6.1 云数据库概述6.2 云数据库产品6.3 UMP系统6.3.1 UMP系统概述6.3.2 UMP系统架构6.3.3 UMP系统功能 6.4 Amazon云数据库6.4.1 Amazon和云计算的渊源6.4.2 Amazon AWS6.4.3 AWS平台上的云数据库6.5 微软云数据库SQL Azure 6.云数据库 6.1 云数据库概述 云…

小说推文和短剧推广真的赚钱吗以及授权渠道

先说授权渠道&#xff0c;可以通过”巨量推文“进行申请授权 小说推文和短剧推广大致分为cpa拉新 cps分成和cpm广告点击的收益 cpa拉新是通过你的引导进入后的新用户 cps分成是根据你的引导进入后并付费一定的比例分成给你 cpm广告点击是进入小程序后看了广告和点击了广告的…

浅述安防视频可视化场景中TSINGSEE青犀AI智能化应用的分析

随着社会的不断发展和安防需求的不断提升&#xff0c;安防视频可视化场景已经成为人们关注的焦点。而随着人工智能、大数据等技术的不断发展&#xff0c;智能化应用在安防视频可视化场景中的应用也越来越多。本文将分析安防视频可视化场景中的智能化应用&#xff0c;主要包括以…