【2】贪心算法-综述

前言
从前,有一个很穷的人救了一条蛇的命,蛇为了报答他的救命之
恩,于是就让这个人提出要求,满足他的愿望。这个人一开始只要求简
单的衣食,蛇都满足了他的愿望,后来慢慢地贪欲升起,要求做官,蛇
也满足了他。这个人直到做了宰相还不满足,还要求做皇帝。蛇此时终
于明白了,人的贪心是永无止境的,于是一口就把这个人吞掉了。
所以,蛇吞掉的是宰相,而不是大象。故此,留下了“人心不足
蛇吞相”的典故。

人之初,性本贪

我们小时候背诵《三字经》,
“人之初,性本善,性相近,习相远。
”其实我觉得很
多时候“人之初,性本贪”
。小孩子吃糖果,总是想要多多的;吃水果,想要最大的;
买玩具,总是想要最好的,这些东西并不是大人教的,而是与生俱来的。对美好事物
的趋优性,就像植物的趋光性,
“良禽择木而栖,贤臣择主而事”“窈窕淑女,君子好逑”
,我们似乎永远在追求美而优的东西。现实中的很多事情,正是因为趋优性使
我们的生活一步一步走向美好。例如,我们竭尽所能买了一套房子,
然后就想要添置一些新的家具,再就想着可能还需要一辆车子…… 凡事都有两面性,一把刀可以做出美味佳肴,也可以变成杀人凶器。
在这里,我们只谈好的“贪心”。
贪心算法
贪心算法的本质
算法导论中如是说:
在这里插入图片描述
在这里插入图片描述
在贪心算法中,注意以下几个问题:
(1)没有后悔药。一旦做出选择,不可以反悔。
(2)有可能得到的不是最优解,而是最优解的近似解。
(3)选择什么样的贪心策略,直接决定算法的好坏。
贪心算法需要遵循的原则
在这里插入图片描述
在解决问题时,通常把原问题分解成规模较小的子问题。
如果原问题的解没有办法通过子问题的解而得到,那么这个分解是没有意义的。
贪心算法的秘籍
(1)贪心策略的确定
在这里插入图片描述
(2)局部最优解
根据贪心策略,一步一步地得到局部最优解。例如,第一次选一个
最大的苹果放起来,记为a1,第二次再从剩下的苹果堆中选择一个最大
的苹果放起来,记为a2,以此类推。
(3)全局最优解
把所有的局部最优解合成原来问题的一个最优解。
类似于冒泡排序就是采用的贪心的算法
在这里插入图片描述
在这里插入图片描述
贪心算法的缺点主要有以下几点:

  • 可能无法得到全局最优解:贪心算法通常只考虑当前情况下的最优解,而不考虑后续步骤对解的影响。因此,可能会得到局部最优解,但不是全局最优解。
  • 需要满足贪心选择性质:贪心算法只能用于满足贪心选择性质的问题。如果问题没有这种性质,那么贪心算法将无法提供正确的解决方案。
  • 可能受限于问题的约束条件:问题的约束条件可能对贪心算法的有效性产生限制。如果问题的约束条件不满足某些条件,贪心算法可能就无法提供正确的解决方案。
  • 可能存在多个最优解:对于某些问题而言,可能存在多个最优解。在这种情况下,贪心算法可能会得到任意一个最优解,但无法保证得到的是哪一个。
    算法的求解步骤
  • 问题分析(策略选择)
  • 算法设计
  • 完美图解
  • 伪代码
  • 实战演练
  • 算法解析(时间复杂度、空间复杂度)

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

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

相关文章

selenium+python实现基本自动化测试

安装selenium 打开命令控制符输入:pip install -U selenium 火狐浏览器安装firebug:www.firebug.com,调试所有网站语言,调试功能 Selenium IDE 是嵌入到Firefox 浏览器中的一个插件,实现简单的浏览器操 作的录制与回…

屏幕分辨率dpi解析(adb 调试查看)

authordaisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 ro.sf.lcd_density属性指定了这个机型使用的dpi是多少,dpi全称是dots per inch,对角线每英寸的像素点的个数。 密度 ldpi mdpi hdpi xhdpi xxhdpi 分辨率 240x320 320x480 480x800 7…

Cannot find module ‘core-js/modules/es6.regexp.constructor‘

npm run dev 之后报如下错误 解决方法:npm install core-js2 如果超时或者下载时间慢可以尝试 用cnpm install core-js2

软件工程知识总结梳理

🔥🔥宏夏Coding网站,致力于为编程学习者、互联网求职者提供最需要的内容!网站内容包括求职秘籍,葵花宝典(学习笔记),资源推荐等内容。在线阅读:https://hongxiac.com&…

Nodejs 第十六章(ffmpeg)

FFmpeg 是一个开源的跨平台多媒体处理工具,可以用于处理音频、视频和多媒体流。它提供了一组强大的命令行工具和库,可以进行视频转码、视频剪辑、音频提取、音视频合并、流媒体传输等操作。 FFmpeg 的主要功能和特性: 格式转换:…

Network: use `--host` to expose

vite 启动项目提示 Network: use --host to expose 同事不能通过本地IP地址访问项目 解决方案:package.json中启动命令配置本地IP地址 vite --host 192.168.200.252

Twitter图片数据优化的细节

Twitter个人数据优化:吸引更多关注和互动 头像照片在Twitter上,头像照片是最快识别一个账号的方法之一。因此,请务必使用公司的标志或与品牌相关的图片。建议尺寸为400x400像素。 为了建立强大的品牌形象和一致性,强烈建议在所有…

虹科教您 | 可实现带宽计量和延迟计算的时间敏感网络测试工具RELY-TSN-LAB操作指南与基本功能测试

1. RELY-TSN-LAB产品概述 时间敏感网络(TSN)能够合并OT和IT世界,这将是真正确保互操作性和标准化的创新性技术。这项技术的有效开发将显著降低设备成本、维护、先进分析服务的无缝集成以及减少对单个供应商的依赖。为了在这些网络中实现确定性,需要控制…

Kotlin Android中错误及异常处理最佳实践

Kotlin Android中错误及异常处理最佳实践 Kotlin在Android开发中的错误处理机制以及其优势 Kotlin具有强大的错误处理功能:Kotlin提供了强大的错误处理功能,使处理错误变得简洁而直接。这个特性帮助开发人员快速识别和解决错误,减少了调试代…

12:STM32---RTC实时时钟

目录 一:时间相关 1:Unix时间戳 2: UTC/GMT 3:时间戳转化 二:BKP 1:简历 2:基本结构 三: RTC 1:简历 2: 框图 3:RTC基本结构 4:RTC操作注意 四:案例 A:读写备份寄存器 1:连接图 2: 步骤 3: 代码 B:实时时钟 1:连接图 2:函数介绍 3:代码 一:时间相关 1:Un…

Linux -- 使用多张gpu卡进行深度学习任务(以tensorflow为例)

在linux系统上进行多gpu卡的深度学习任务 确保已安装最新的 TensorFlow GPU 版本。 import tensorflow as tf print("Num GPUs Available: ", len(tf.config.list_physical_devices(GPU)))1、确保你已经正确安装了tensorflow和相关的GPU驱动,这里可以通…

【数据结构练习】链表面试题集锦二

目录 前言: 1.链表分割 2.相交链表 3.环形链表 4.环形链表 II 前言: 数据结构想要学的好,刷题少不了,我们不仅要多刷题,还要刷好题!为此我开启了一个必做好题锦集的系列,每篇大约5题左右。此…

“高级前端开发技术探索路由的使用及Node安装使用“

目录 引言1. Vue路由的使用2. VueNode.js的安装使用总结 引言 在当今互联网时代,前端开发技术日新月异,不断涌现出各种新的框架和工具。作为一名前端开发者,我们需要不断学习和探索新的技术,以提升自己的开发能力。本文将深入探讨…

【C# Programming】值类型、良构类型

值类型 1、值类型 值类型的变量直接包含值。换言之, 变量引用的位置就是值内存中实际存储的位置。 2、引用类型 引用类型的变量存储的是对一个对象实例的引用(通常为内存地址)。 复制引用类型的值时,复制的只是引用。这个引用非常小&#xf…

前后端分离毕设项目之产业园区智慧公寓管理系统设计与实现(内含源码+文档+教程)

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ 🍅由于篇幅限制,想要获取完整文章或者源码,或者代做&am…

短视频抖音账号矩阵系统源码开发者自研(四)

抖音是一款备受欢迎的短视频APP,拥有数亿的用户,其中包括了大量的粉丝。为了让更多的人能够发现和观看到你的视频,抖音SEO是必不可少的一环,特别是对于拥有企业或个人品牌的用户来说。在这个过程中,抖音SEO源码的开源部…

SQL注入脚本编写

文章目录 布尔盲注脚本延时注入脚本 安装xampp,在conf目录下修改它的http配置文件,如下,找到配置文件: 修改配置文件中的默认主页,让xampp能访问phpstudy的www目录,因为xampp的响应速度比phpstudy快得多&am…

Linux C 网络基础

为什么需要网络通信? 进程间通信解决的是本机内通信 网络通信解决的是任意不同机器的通信 实现网络通信需要哪些支持 1.通信设备:网卡(PC机自带); 路由器和交换机; 光纤…

在Scrapy框架中使用隧道代理

今天我要和大家分享一些实战经验,教你如何在Scrapy框架中使用隧道代理。如果你是一个热爱网络爬虫的开发者,或者对数据抓取和处理感兴趣,那么这篇文章将帮助你走上更高级的爬虫之路。 首先,让我们简单介绍一下Scrapy框架。Scrapy…

【计算机网络】——应用层

// 图片取自王道 仅做交流学习 一、基本概念 应用层概述 协议是 网络层次模型 中多台主机之间 同层之间进行通信的规则。是一个水平概念 垂直空间上,向下屏蔽下层细节,向上提供服务接入,多台主机之间同层之间形成一条逻辑信道。 应用层的…