【2】贪心算法-综述

news2025/1/13 5:52:06

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

人之初,性本贪

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

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

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

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

相关文章

基于SSM的出租车管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

智荟康午休课桌椅成为第十届中国慈善展览会公益亮点产品

第十届中国慈善展览会(以下简称“慈展会”)于9月15日至17日在深圳会展中心隆重举办,此次展会为期3天,主要围绕“共建现代化慈善,聚力高质量发展”的主题,重点聚焦聚力民生福祉,将打造“一展多元…

新手小白如何学习自动化测试?

前言 测试自动化在各个行业和应用中被广泛使用,并产生巨大的效果。软件开发方法,如DevOps、Agile、Waterfall和它们的不同风格,广泛使用测试自动化来降低成本,提高效率和准确性,并加快回归测试。 测试自动化是在充分…

LeetCode 75 - 01 : 最小面积矩形

type pair struct{x, y int }func minAreaRect(points [][]int)int{mp : map[pair]struct{}{}// 将二维数组中的坐标映射到map中for i : range points{mp[pair{points[i][0], points[i][1]}] struct{}{}}// 将结果设置为一个最大值,防止影响求最小值的逻辑res : ma…

学习记忆——宫殿篇——记忆宫殿——记忆桩——工人宿舍

脸盆铁盒白色泡沫绳子电热炉 6. 椅子 7. 门帘 8. 塑料 9. 书 10.安全帽 11. 凳子 暖壶烟灰缸计算器水杯刷子

【GPU编程】Visual Studio创建基于GPU编程的项目

vs创建基于GPU编程的项目 🍊前言🐸方法一-CUDA Runtime生成😝debug设置 🍅方法二-空项目配置🍉🍉🍉代码验证 🍊前言 cuda以及cudnn的安装以及系统环境变量的配置默认已经做完。如果…

七天学会C语言-第六天(指针)

1.指针变量与普通变量 指针变量与普通变量是C语言中的两种不同类型的变量,它们有一些重要的区别和联系。 普通变量是一种存储数据的容器,可以直接存储和访问数据的值。: int num 10; // 定义一个整数型普通变量num,赋值为10在例…

【算法训练-二叉树 四】【对称与翻转】对称二叉树、翻转二叉树

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【二叉树的形态变化】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条…

后端思维:通过代码去重,做一个后端通用模板

目录 后端思维 1. 优化前的例子 2. 抽取公用方法去重 3. 反射对比字段 4.Lambda函数式泛型 5. 继承多态. 6. 模板方法 6.1 定义对比模板的骨架 6.2 模板的方法逐步细化 6.3 不同对比子类 7. 工厂模式 模板方法 策略模式全家桶 最后 后端思维 最近工作中,我通过层层…

学Python的漫画漫步进阶 -- 第十二步.文件读写

学Python的漫画漫步进阶 -- 第十二步.文件读写 十二、文件读写12.1 打开文件12.2 关闭文件12.2.1 在finally代码块中关闭文件12.2.2 在with as代码块中关闭文件 12.3 读写文本文件12.4 动动手——复制文本文件12.5 读写二进制文件12.6 动动手——复制二进制文件12.7 练一练12.8…

Redis之list类型

文章目录 Redis之list类型1. 列表添加/弹出元素2. 查看列表3. 获取列表中元素的个数4. 删除列表中指定的值5. 获取/指定元素的值6. 向列表中插入元素7. 删除指定索引范围之外的所有元素8. 将元素从一个列表转移到另一个列表9. 应用场景9.1 队列9.2 类似微信上订阅公众号&#x…

MidJourneyAI绘画之月满中秋情更浓

皓月当空照人间, 银河洒满天幕间。 嫦娥轻舞婵娟态, 桂香飘散诗意添。 团圆乐享如意时, 家人相聚笑声吹。 中秋欢庆如诗意, 祝福平安好运气。

从网约车平台合规问题看企业合规难题如何破解

随着互联网的快速发展,网约车行业逐渐崛起并成为人们出行的重要选择之一。然而,虽然网约车平台带来了便利和效率,但也引发了一系列合规问题。 近日,西安市交通运输综合执法支队和西安市出租汽车管理处组织开展了西安市网约车行业…

Leetcode 95. 不同的二叉搜索树 II

文章目录 题目代码&#xff08;9.21 首刷看解析&#xff09; 题目 Leetcode 95. 不同的二叉搜索树 II 代码&#xff08;9.21 首刷看解析&#xff09; class Solution { public:vector<TreeNode*> generateTrees(int n) {return build(1,n);}vector<TreeNode*> bu…

singularity docker 拉取镜像 seurat和scapy spatial空转数据转换 cell2location

JiekaiLab/scDIOR: scDIOR: Single cell data IO softwaRe (github.com) module availablemodule load singularitysingularity pull docker://jiekailab/scdior-image:Seuratv4_Scanpy1.8 export PATH/seu_share/apps/singularity/bin/singularity:$PATH

C++数据结构题:DS 顺序表--连续操作

建立顺序表的类&#xff0c;属性包括&#xff1a;数组、实际长度、最大长度&#xff08;设定为 1000 &#xff09; 该类具有以下成员函数&#xff1a; 构造函数&#xff1a;实现顺序表的初始化。 插入多个数据的 multiinsert(int i, int n, int item[]) 函数&#xff0c;实…

vue 脚手架 入门 记录

vue 脚手架 入门 记录 以管理员身份运行PowerShell执行&#xff1a;get-ExecutionPolicy&#xff0c;回复Restricted&#xff0c;表示状态是禁止的 3.执行&#xff1a;set-ExecutionPolicy RemoteSigned 4.选择Y 注意&#xff1a;一定要以管理员的身份运行PowerShell&#xff…

Verilog功能模块——标准FIFO转FWFT FIFO

前言 在使用FIFO IP核时&#xff0c;我更喜欢使用FWFT(First Word First Through) FIFO而非标准FIFO&#xff0c;FWFT FIFO的数据会预先加载到dout端口&#xff0c;当empty为低时数据就已经有效了&#xff0c;而rd_en信号是指示此FIFO更新下一个数据&#xff0c;这种FWFT FIFO的…

【Linux基础】第30讲 Linux用户和用户组权限控制命令(二)

1&#xff09;sudo命令 sudo是Linux系统管理指令&#xff0c;是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具&#xff0c;如halt,reboot,su等等&#xff0c;这样不仅减少了root用户的登录和管理时间&#xff0c;同样也提高了安全性。 2&#xff09;修改配置…

Grafana设置默认主页

点击【设置/管理】-> 【默认首选项 Preferences】-> 【主页仪表盘】 在下拉中选择一个页面作为主页即可