【贪心算法】思想 & 基本要素 & 贪心算法与局部最优 & 贪心算法与动态规划的区别 & 运用贪心算法求解问题

贪心算法】经典案例分析 贪心算法在每一步选择中都采取当前状态下最优的选择,以期望达到全局最优 阅读详情

首先我们先代入问题来认识一下贪心算法涉及的问题

找钱问题
给顾客找钱,希望找零的钞票尽可能少,零钱种类和数量限定
找钱问题满足最优子结构
最快找零(贪心):为得到最小的找零次数,每次最大程度低减少零额

活动安排问题
设 个活动都需要使用某个教室,已知它们的起始时间和结束时间,求合理的安排使得举行的活动数量最多
贪心:使得每次安排后,教室的空闲时间最多
在这里插入图片描述
解决过程如下:
在这里插入图片描述
在这里插入图片描述
贪心算法求得的相容活动集是最大的
第一步:证明最优解中包含结束时间最早的活动
设相容集 A 是一个最优解,其结束最早的活动为 a,则 ( A - { a }) U { 1 } 也是一个最优解
第二步:证明去掉结束时间最早的活动后,得到的子问题仍是最优的:反证法

理解贪心算法

贪心算法总是做出当前最好的选择

  • 贪心选择的依据是当前的状态,而不是问题的目标
  • 贪心选择是不计后果的
  • 贪心算法通常以自顶向下的方法简化子问题

贪心算法求解的问题具备以下性质

  • 贪心选择性质:问题的最优解可以通过贪心选择实现
Dijkstra算法复习 Dijkstra算法复习 重新复习一下Dijkstra算法 Dijkstra算法是一种基于贪心策略的算法,用于求单源最短路径(单源:从一个顶点出发,Dijkstra算法只能求一个顶点到其他点的最短距离而不能任意两点)。每次新扩展一个路程最短的点,更新其相邻的点的路程。注意在权值为负的情况下,Dijkstra算法不适用。 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。如在Dijkstra算法中,我们总是选定离起点最近的点 阅读详情

相关推荐

算法设计分析:贪心算法(2)- 最短路问题(DP到贪心的优化)

本文基于UCAS卜东波老师的算法课撰写,包含了笔者自己的思考。本文是贪心算法章节的第二篇,主要讲述贪心算法在最短路问题中的应用,包含Bellman Ford算法和其两个优化点的思考。

GentleCP的博客 1835

贪心算法的五个经典问题分析和实现

问题1:活动安排问题 问题描述: 现在给你一个会场,有许社团需要在这个会场上活动, 已知各个社团在这个会场上活动的时间(起始时间和终止时间) 要求出来怎么安排 能够使得这个教室z在这一天之内接待尽可能多的社团  解题思路算法思想 已经知道我们有n个活动需要安排 不妨考虑我们需要首先安排哪个活动 如果这n个活动的开始时间分别为a1-an 结束时...

weixin_42222917的博客 8707

动态规划(Dynamic Programming)贪心算法(Greedy Algorithm)

动态规划算法俩性质, 贪婪算法三个性质,加上一个局部最优解时全局最优解,即存在最优子结构 最小生成树算法的生成树使用了所有结点,最短路径算法不需要使用所有的结点。 最小生成树算法的无向图 最短路径算法的有向图 目前已经知道最小生成树算法可以用贪婪算法 ...

Leon_winter的博客 1342

窥探贪心算法:从贪婪到最优,解密最佳选择之道

贪心算法是一种简单而强大的算法思想,常用于解决最优问题。它的核心思想是在每一步选择中,都采取当前情况下最优的选择,而不考虑全局的最优解。贪心算法在很多实际问题中都有广泛的应用。例如,找零钱问题、任务调度、背包问题等。贪心算法通常适用于满足贪心选择性质和最优子结构性质的问题

DevCorner的Pro技术博客 1183

贪心算法之圣诞老人的礼物

贪心算法详解 贪心算法思想: 顾名思义,贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不能对所有问题都得到整体最优解,但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。 贪心算法基本要素: 1.贪心选择性质。所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,

wuyvle的博客 1091

算法设计分析:贪心算法 - 排课问题(DP贪心的区别应用)

本文基于UCAS卜东波老师的算法课撰写,包含了笔者自己的思考。本章开启一个新的单元:贪心算法。文章以排课问题为例,讲述了贪心算法动态规划区别贪心算法更简单、易实现,但也有更大的限制要求。阅读文章,你会对贪心算法有一个崭新的了解

GentleCP的博客 7993

分治、动态规划贪心算法的比较

最近学习了这三种算法思想,发现这三者之间有相似也有不同,总结一篇博客。 目录一:三种算法的联系二:三种算法区别 一:三种算法的联系 分治、动态规划贪心算法都是把一个大的问题给分解成子问题,通过解决子问题来最终解决原问题的。 具体的来说: 分治:主要分为三个步骤递归的解决问题。 divide:将问题划分为一些子问题,形式相同,规模更小 conquer:递归的求解问题,当子问题足够小进入基本情况(base case),停止递归,返回到上一层递归。 combine:返回递归调用的过程,逐步将子问题

qq_45785407的博客 1695

贪心算法-动态规划贪心的区别

引言 在学习完分治和动态规划之后,我们来学习贪心算法。解决问题的观察思路和解决方法的选择可如下图所示。 可分可以使用分治思想,如果是最优问题,并且可以多步决策、有最优子结构,则可以使用动态规划,再进一步,如果还具有贪心选择的性质,则可以使用贪心算法贪心算法概念 贪心算法动态规划很像,贪心算法主要是在动态规划上多了贪心选择性质,贪心算法是在多步决策每一步都要直接最优,而不是通过动态规划那样枚举,最后这些局部最优解组成了全局最优。 排课问题 我们利用排课问题来具体阐述贪心算法动态规划的差别。 问题

Chary的Blog 1673

动态规划算法

动态规划 动态规划不是某一种具体的算法,而是一种算法思想:若要解决一个给定问题,我们需要解决其子问题,再根据子问题的解得出原问题的解。 应对这种算法思想解决问题的可行性,对子问题问题的关系,以及子问题之间的关系这两方面有一些要求,她们分别对应了最优子结构和重复子问题最优子结构 最优子结构规定的是子问题问题的关系。 动态规划要解决的都是一些问题最优解,即从很多解决问题的方案中找到最优的一个。当我们在求一个问题最优解的时候,如果可以把这个问题分解成多个子问题,然后递归地找到每个子问题最优解,最后

qq_36553387的博客 243

dp贪心和分治的区别

分治 解决分治问题的时候,思路就是想办法把问题的规模减小,有时候减小一个,有时候减小一半,然后将每个小问题的解以及当前的情况组合起来得出最终的结果。例如归并排序和快速排序,归并排序将要排序的数组平均地分成两半,快速排序将数组随机地分成两半。然后不断地对它们递归地进行处理。 这里存在有最优的子结构,即原数组的排序结果是在子数组排序的结果上组合出来的,但是不存在重复子问题,因为不断地对待排序的数组进行对半分的时候,两半边的数据并不重叠,分别解决左半边和右半边的两个子问题的时候,没有子问题重复出现,这是动态规划

专业^团队的博客 725

算法导论第四版学习(25)

贪心算法通过一系列选择得到最优解,每一步都选择当前看来最优的选项。Sij​ak​Sik​Skj​cij0maxak​∈Sij​​cikckj1​Sij​∅否则​a1​S1​ai​∣si​≥f1​:通过局部最优选择得到全局最优解。:问题最优解包含子问题最优解。

虾球 802

算法数据结构:动态规划DP

动态规划(DP)是一种高效解决复杂问题算法思想,通过分解为重叠子问题并存储子问题解来避免重复计算。其核心包括重叠子问题最优子结构特性,并通过状态转移方程建立子问题关系。DP分治法、贪心算法区别在于其对子问题解的重用。解题步骤包括定义状态、推导转移方程、确定初始条件和计算顺序。经典案例有斐波那契数列、0-1背包问题和最长公共子序列(LCS)。优化技巧包括空间压缩和记忆化搜索。DP广泛应用于组合优化、字符串处理等领域,贪心算法相比更能确保全局最优。建议从基础案例入手,多练习状态定义和边界条件处理。

Cachel Wood的博客 1222

动态规划(Dynamic Programming, DP)-ChatGPT4o作答

动态规划是一种强大的问题求解策略,特别适用于。

qq_46215223的博客 737

贪心算法(2)——算法导论(22)

1. 写在前面 在上一篇博客中,我们通过选择问题了解了贪心算法。这一篇博客将继续介绍贪心算法,主要谈谈贪心算法的原理,并简单分析一下背包问题。 2. 贪心算法原理 通过上一篇博客中的选择问题,我们看到,贪心算法可以由如下几个步骤来实现: 确定问题最优子结构; 设计一个递归算法; 证明如果我们做出一个贪心选择,则只剩下一个子问题; 证明贪心选择是安全的; 设计并实现贪心算法。 对比动...

dayin201608的博客 243

蓝桥杯贪心算法实战:从思想到代码的解题框架避坑指南

贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法思想,其核心原理在于通过局部最优解的累积,期望达到全局最优。这种策略的有效性依赖于问题本身具备“贪心选择性质”和“最优子结构”。在工程实践中,贪心算法因其高效性,常被用于求解最优问题,例如在资源分配、任务调度和路径规划等场景中,快速找到可行且往往是最优的解决方案。理解贪心算法的适用条件经典模型,是提升算法设计问题解决能力的关键。本文聚焦于**蓝桥杯竞赛**中的高频考点,深入剖析**区间调度****最优分配**等经典贪心模型,通过清晰的步骤拆解

weixin_30843605的博客 488

湖南大学2025算法设计分析简答题整理

对于一个问题,如果给定一个候选解,可以在多项式时间内验证该解是否正确。那么该问题是 NP 问题

delicious233的博客 58

计算机常用算法总结

一、贪心算法 需要具备以下两个特征:(1)贪心选择策略,当前的选择只依赖过去已经做出的选择(2)最优子结构性质,一个问题最优解包含其子问题最优解 Prim算法和Kruskal算法 https://www.cnblogs.com/ggzhangxiaochao/p/9070873.html Dijkstra算法 https://blog.csdn.net/weixin_41969587/article/details/82624260 Huffman算法 基本思路:(1)将待求解问题分为多个子问题(2

Lemok的博客 1931

数学建模竞赛科研写作:从LaTeX环境搭建到机器学习模型实战指南

LaTeX作为学术论文排版的标准工具,通过内容格式分离的哲学,实现了专业、美观的文档输出,其核心价值在于提升科研工作的规范性效率。在机器学习领域,模型是解决预测、分类优化问题的数学框架,从经典的线性回归、逻辑回归,到集成学习代表随机森林,再到处理序列数据的Transformer,不同模型适用于不同的数据模式问题场景。掌握这些基础模型算法的原理及适用条件,是进行有效数据分析和数学建模的基石。本文聚焦于数学建模科研实践,系统梳理了从LaTeX环境配置、论文模板使用,到常用机器学习模型(如随机森林、T

weixin_30633405的博客 479
上一篇: HTML基本结构与基本标签
下一篇: 【动态规划】思想 & 基本要素 & 运用动态规划求解问题
根号二点五
博客等级 码龄7年 95粉丝 109原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值