算法-贪心算法简单介绍

下面是贪心算法视频课的导学内容.

目录

    • 1. 什么是贪心算法?
    • 2. 贪心算法简单的三个例子:
      • 1. 找零问题
      • 2. 最小路径和问题
      • 3. 背包问题
    • 3. 贪心算法的特点
    • 4. 贪心算法学习的方式?

1. 什么是贪心算法?

简单来说, 我们称以局部最优进而使得全局最优的一种思想实现出来的算法为贪心算法.
其过程, 往往分为:

  1. 把解决问题分为若干部分
  2. 解决每一步的时候, 都选择当前看起来"最优"的选择
  3. “希望” 得到全局最优解

下面来解释两个引号词
“最优”: 上面说的意思是当前看来最优, 而不是从整体的角度看起来最优
“希望”: 意思是按这种思想去处理题目, 有可能会导致最后结果不是最优, 有可能从全局来看是最优结果的意思

2. 贪心算法简单的三个例子:

1. 找零问题

情景: 现在你有50块钱, 买了4块钱的东西, 卖家想要用最少的张数找你零钱.
在这里插入图片描述
此时可以试试贪心算法.

应该找你的钱数:

        50 - 4 = 46

按照贪心策略, 此时应该找你一张最大面额的, 因此是给你一张20的

        46 - 20 = 26 此时还需要找你26元

按照贪心策略, 此时应该找你一张最大面额的, 因此是给你一张20的

        26 - 20 = 6 此时还需要找你6元

按照贪心策略, 此时应该找你一张最大面额的, 因此是给你一张5元的

        6 - 5 = 1 此时还需要找你1元

按照贪心策略, 此时应该找你一张最大面额的, 因此是给你一张1元的

        1 - 1 = 0 此时还需要找你0元

此时找钱结束

其过程如下:
在这里插入图片描述

2. 最小路径和问题

起点在(0, 0)位置, 规定只能左右上下移动, 在这其中会路过许多方块. 每次路过方块需要加上对应的"路径值", 问如何才能到达目的地同时求和为最小?

按照贪心思想, 过程如下:
在这里插入图片描述

3. 背包问题

最大背包容量为: 8单位, 如何放一些物品, 使得该背包拿到的总价值最高?
在这里插入图片描述
假设我们按照V去贪心: ③ * 8 -> 总价值是: 1 * 8 = 8

假设我们按照W去贪心: ① * 1 + ③ * 3 -> 总价值是: 10 + 1 * 3 = 13

假设我们按照W/V去贪心: ① * 1 + ③ * 3 -> 总价值是: 10 + 1 * 3 = 13

3. 贪心算法的特点

  1. 贪心算法没有标准和模板, 贪心算法只是一种思想

  2. 贪心算法需要证明其对错, 对的需要其证明他是对的, 错的需要证明, 或者举反例

对于证明这块来说,

2-1 显然找零问题是对的, 证明如下:
在这里插入图片描述
2-2 最小路径和问题 和 背包问题都是错误的, 证明如下(举反例):
在这里插入图片描述

4. 贪心算法学习的方式?

  1. 遇到不会的很正常, 看多了解析就"可能"会了.
  2. 注重证明. 比如"背包"和"路径和"问题贪心出来都不是最优解.

EOF.

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

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

相关文章

Node.js - Express框架

1. 介绍 Express 是一个基于 Node.js 的 Web 应用程序框架,主要用于快速、简便地构建 Web 应用程序 和 API。它是目前最流行的 Node.js Web 框架之一,具有轻量级、灵活和功能丰富的特点。 核心概念包括路由,中间件,请求与响应&a…

day08_Kafka

文章目录 day08_Kafka课程笔记一、今日课程内容一、消息队列(了解)**为什么消息队列就像是“数据的快递员”?****实际意义**1、产生背景2、消息队列介绍2.1 常见的消息队列产品2.2 应用场景2.3 消息队列中两种消息模型 二、Kafka的基本介绍1、…

459. 重复的子字符串【力扣】——kmp拼接字符串解法

常规kmp解答 class Solution { public:void getNext(int *next,string s){int j0;next[0]0;for(int i1;i<s.size();i){while(j>0 && s[i]!s[j]){jnext[j-1];}if(s[i]s[j]) j;next[i]j;}}bool repeatedSubstringPattern(string s) {if(s.size()0) return false;i…

浅谈云计算06 | 云管理系统架构

云管理系统架构 一、云管理系统架构&#xff08;一&#xff09;远程管理系统&#xff08;二&#xff09;资源管理系统&#xff08;三&#xff09;SLA 管理系统&#xff08;四&#xff09;计费管理系统 二、安全与可靠性保障&#xff08;一&#xff09;数据安全防线&#xff08;…

【STM32】HAL库USB实现软件升级DFU的功能操作及配置

【STM32】HAL库USB实现软件升级DFU的功能操作及配置 文章目录 DFUHAL库的DFU配置修改代码添加条件判断和跳转代码段DFU烧录附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏…

PHP答题考试系统

&#x1f50d; 这是一款由PHP与Uniapp强强联手打造的小程序答题考试系统&#xff0c;它如同智慧教育领域中的一颗璀璨明珠&#xff0c;凭借其强大的功能和灵活多变的应用&#xff0c;牢牢吸引了无数求知者的目光。系统全面覆盖了多种试题类型&#xff0c;从基础易懂的判断题、单…

瑞芯微 RK 系列 RK3588 使用 ffmpeg-rockchip 实现 MPP 视频硬件编解码-代码版

前言 在上一篇文章中&#xff0c;我们讲解了如何使用 ffmpeg-rockchip 通过命令来实现 MPP 视频硬件编解码和 RGA 硬件图形加速&#xff0c;在这篇文章&#xff0c;我将讲解如何使用 ffmpeg-rockchip 用户空间库&#xff08;代码&#xff09;实现 MPP 硬件编解码。 本文不仅适…

Element Plus 之 el-table相同行合并(通用函数),相同列合并(自行判断需合并的字段以及相应的列下标)

展示 代码 <el-table :data"tableData" border style"width: 100%" :span-method"objectSpanMethod"><el-table-column prop"date" label"Date" width"180" align"center" /><el-table…

深入理解计算机系统阅读笔记-第十二章

第12章 网络编程 12.1 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型的。根据这个模型&#xff0c;一个应用时由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源&#xff0c;并且通过操作这种资源来为它的客户端提供某种服务。例如&#xf…

ubuntu20.04安装MySQL5.7

deb安装 下载deb文件并配置 wget https://repo.mysql.com//mysql-apt-config_0.8.12-1_all.deb sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb我使用xshell可以正常。 这个弹出框里&#xff0c;选择的是“ubuntu bionic”。(在终端工具上&#xff0c;有可能显示不了选项)【…

CSS | CSS实现两栏布局(左边定宽 右边自适应,左右成比自适应)

目录 一、左边定宽 右边自适应 1.浮动 2.利用浮动margin 3.定位margin 4.flex布局 5.table 布局 二、左右成比自适应 1:1 1flex布局 table布局 1:2 flex布局 三列布局链接&#xff1a;CSS | 实现三列布局&#xff08;两边边定宽 中间自适应&#xff0c;自适应成比&#xff09;-…

Win10微调大语言模型ChatGLM2-6B

在《Win10本地部署大语言模型ChatGLM2-6B-CSDN博客》基础上进行&#xff0c;官方文档在这里&#xff0c;参考了这篇文章 首先确保ChatGLM2-6B下的有ptuning AdvertiseGen下载地址1&#xff0c;地址2&#xff0c;文件中数据留几行 模型文件下载地址 &#xff08;注意&#xff1…

Java中异常的学习

目录 Java 异常概述 异常的抛出机制 异常的解决方法(处理机制) Java异常体系结构 常见的异常 异常处理 try catch finally throws throw 运行期异常和编译期异常 自定义异常 Java 异常概述 在使用计算机语言进行项目开发的过程中&#xff0c;即使程序员把代码写得尽…

python 连接高斯数据库报错

问题1&#xff1a;报错信息&#xff1a; import psycopg2时报错 /lib64/libgssapi_krib5.so.2 symbol krb5_ser_contect_init version krb5_3_MIT not defined in file libkrb5.so.3 错误原因&#xff1a; 解决&#xff1a; 若通过更换krb相关安装包&#xff0c;psycopg2 …

excel 整理表格,分割一列变成多列数据

数据准备 对于很多系统页面的数据是没有办法下载的。 这里用表格数据来举例。随便做数据的准备。想要看excel部分的可以把这里跳过&#xff0c;从数据准备完成开始看。 需要一点前端基础知识&#xff0c;但不多&#xff08;不会也行&#xff09;。 把鼠标放在你想要拿到本地的…

刀客doc:快手的商业化架构为什么又调了?

一、 1月10日&#xff0c;快手商业化及电商事业部进行新一轮的架构调整。作为2025年快手的第一次大调整&#xff0c;变动最大的是负责广告业务的商业化事业部。快手商业化将原来的8个业务中心&#xff0c;现在统合成了5个&#xff0c;行业归拢看上去更加明晰了。 根据自媒体《…

thinkphp 5.0 结合redis 做延迟队列,队列无法被消费

目录 一、Linux 环境下 二、如何验证消息队列被正确监听 一、Linux 环境下 项目部署在Linux 环境下&#xff0c;首先找到项目的部署路径&#xff0c;接着输入命令,这个命令是以守护进程方式进行监听你的队列&#xff0c;只要redis 不关闭 就可以一直监听这个队列 nohup php …

计算机网络 (40)域名系统DNS

前言 计算机网络域名系统DNS&#xff08;Domain Name System&#xff09;是互联网的基础技术之一&#xff0c;它负责将人类可读的域名转换为计算机用来通信的数字IP地址。 一、基本概念 DNS的主要目的是将域名解析或翻译为IP地址&#xff0c;使得用户可以通过简单易记的域名来访…

做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)

图&#xff1a; 股票自选助手 这是一个基于 Django 开发的 A 股自选股票信息查看系统。系统使用 akshare 库获取实时股票数据&#xff0c;支持添加、删除和更新股票信息。 功能特点 支持添加自选股票实时显示股票价格和涨跌幅一键更新所有股票数据支持删除不需要的股票使用中…

C#使用OpenTK绘制3D可拖动旋转图形三棱锥

接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…