首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏每天学Java

    贪心算法如何贪心

    在前面学习最短路径和最小生成树的时候,我们发现Dijkstra算法,Prim算法,Kruskal算法都是属于典型的贪心算法应用。 这篇文章就是对于贪心算法的入门介绍 贪心算法 贪心算法(又称贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 问题所具有的这个性质是该问题可用动态 规划算法贪心算法求解的一个关键特征。 我们通过下面两个例题来看下什么时候选用贪心算法求解。 只要能满足贪心算法的两个性质: 贪心选择性质和最优子结构性质,贪心算法就可以出色地求出问题的整体最优解。即使某些问题,贪心算法不能求得整体的最优解,贪心算法 也能求出大概的整体最优解。

    1.4K10发布于 2020-06-01
  • 来自专栏C++

    算法贪心

    4、贪心算法: 数组中两个字符串的最小距离 #include <iostream> using namespace std; int main() { int n; cin >> n; = -1 || r == -1) cout << -1; else cout << ret; return 0; } 活动选择问题 最小生成树(Prim、Kruskal算法

    18500编辑于 2025-03-14
  • 来自专栏半生瓜のblog

    算法贪心算法

    贪心算法 概念解释 贪婪算法(贪心算法)是指在对问题求解的时候,每一步选择都采用最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪心算法所得到的结果往往不是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。 贪心算法并没有固定的解发框架,算法的关键是贪心策略的选择,根据不用问题选择不同的策略。 解题思路: 用贪心算法的思想,每一步都用能用的最大纸币即可。 会提示找不开,这种情况下我们使用贪心算法得到的答案就不是最优解,因为我们一直在尝试用最大的纸币来尽可能的使用最少的张数来解决问题。这就不是最优的。 贪心算法没有固定的框架,关键是看你怎么选择。 这种情况就需要调整策略,甚至,就不适用贪心算法贪心算法是尽力找到近似的最优解,注重的是速度,不是精准度,并不是说一定能找到合适的解,或是一定能找到解 。 对应问题根据情况不同选择合适的算法解决。

    55730编辑于 2023-05-13
  • 来自专栏_春华秋实

    贪心算法

    贪心算法:分阶段的工作,在每个阶段做出当前最好的选择,从而希望得到结果是最好或最优的算法贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不能回退。 任务调度问题(简单) 这是一个经典简单的贪心问题,只是题目有点长需要认真读。解决这个问题,重点要想好贪心的策略: 阶段性:每个时间表选择哪一个任务。 贪心策略:根据“误时惩罚”对任务进行排序,优先排惩罚大的任务,如果这个时间点已经被占了,依次向前找,判断任务是否能安排? 阶段性:每个区间选择那两个点 贪心策略:   对于所有的区间按右端点从小到大排序。(根据右端点排序)   从第一个区间开始扫描是否覆盖了两个点? 56 */ 最近做了一些贪心算法的题,感觉贪心算法主要是根据问题的要求想出贪心策略,上面提到了没有涉及到什么数据结构和高精度的问题。所以用到最多的就是排序。

    78330发布于 2019-02-22
  • 来自专栏kwai

    算法(四) 贪心

    贪心算法 例题 1,最大子序和 来自LeetCode 53 解法 1,贪心 根据题意我们可以发现这样一个贪心思想:当前面子序列和小于0时,不如从自身重新开始计算。

    44470编辑于 2022-01-10
  • 来自专栏常用算法模板

    算法基础-贪心

    给定 N 个闭区间 [a_i,b_i],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。

    71520编辑于 2022-10-31
  • 来自专栏用户2442861的专栏

    贪心算法

    http://blog.csdn.net/xywlpo/article/details/6439048 贪心算法的设计思想          贪心算法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择 换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。贪心算法对于大部分的优化问题都能产生最优解,但不能总获得整体最优解,通常可以获得近似最优解。 但是,从许多可以用贪心算法求解的问题中看到这类问题一般具有2个重要的性质:贪心选择性质和最优子结构性质。 这是贪心算法可行的第一个基本要素。 贪心算法以迭代的方式作出相继的贪心选择,每作一次贪心选择就将所求问题简化为规模更小的子问题。       问题的最优子结构性质是该问题可用贪心算法求解的关键特征。 贪心法的应用 哈夫曼编码 0-1背包问题 磁盘文件的存储 生产调度问题 信息查询

    1.9K20发布于 2018-09-14
  • 贪心算法.

    序幕 贪心算法(Greedy Algorithm)是一种在求解问题时采取逐步构建解决方案的策略,每一步都选择当前状态下局部最优的解,期望通过局部最优解能够得到全局最优解。 我们需要是,各种峰值,当数字处于上升阶段时,若不止一个数字,就要将其去掉 小结 其实,简单的说,贪心算法就像是 从局部,找到一个规律,并且这个规律适用于全局 一但明白这点,无论难度多大的题,我们都会怀着

    19210编辑于 2025-10-22
  • 算法篇】贪心算法

    贪心算法 贪心算法,是一种在每一步选择中都采取当前状态下的最优策略,期望得到全局最优解的算法策略。也就是说,通过局部最优解,期望得到全局最优解。 贪心算法一般按如下步骤执行: 1,问题分解: 将原问题转化为一系列子问题。 2,贪心选择:对每个子问题求解的时候,都选择当前看起来“最优的”解法。 3,合并解:累计局部最优解形成全局解。 (因为贪心策略可能是错误的) 先简单理解一下贪心算法: 例一:找零问题 这个问题在我们日常生活中很普遍。 假设我们现在可以找的零钱面额为【20,10,5,1】,并且每个有无限张。 这里假设k=46,用 贪心算法的思想,每一步尽可能使用面值最大的纸币即可。 用贪心算法的思想,每一步找钱尽可能使用面值大的。

    42210编辑于 2025-12-30
  • 来自专栏深度学习计算机视觉

    贪心算法+回溯算法

    贪心算法 先来比较一下贪心算法和动态规划 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择,不考虑整体,只考虑局部最优,所以它不一定能得到最优解; 动态规划则是每个步骤都要进行一次选择,但选择通常要依赖子问题的解 所以一般选自自底向上自带备忘的机制,所以一定是最优解; 最优子结构的概念 如果一个问题的解包含其子问题的最优解,则称该问题具有最优子结构,也就是求解大问题的解,是通过求解小问题取解决 如果理解了最优子结构,则会发现贪心算法和动态规划都利用了最优子结构的性质 实现该算法的过程 从问题的某一初始解出发 while 能朝给定总目标前进一步 do 求出可行解的一个解元素 由所有解元素组合成问题的一个可行解 典型的可用贪心来解的问题有 最小生成树、分数背包问题( 所以先选择B,再选择A  再从C中选择5   这时价值肯定最大 但贪心算法一开始就说了,并不保证最优解,所以有时会配合随机算法算法导论第三版第五章有讲)使用  一般来说贪心算法的代码比动态规划简单的多 这是解集合树(具体怎么解决这个问题,再分子界限算法中解决,这里只是介绍回溯法本身) ?

    1.7K91发布于 2018-04-24
  • 来自专栏C++/Linux

    算法专题】贪心算法

    贪心算法 贪心算法介绍 什么是贪心算法呢? 首先,我们需要知道贪心策略,即解决问题的策略,将局部最优转变为全局最优; 把解决问题的过程分为若干步; 解决每一步的时候,都选择当前看起来"最优的"解法; "希望"得到全局最优解 贪心算法的特点: 提出贪心策略 : 输入:nums = [1, 2, 3, 4, 5, 6, 7, 8, 9] 输出:2 提示: 1 <= nums.length <= 1000 0 <= nums[i] <= 1000 思路:贪心算法 最长递增子序列(贪心算法) 题目链接 -> Leetcode -300.最长递增子序列 Leetcode -300.最长递增子序列 题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 买卖股票的最佳时机Ⅱ(贪心算法) 题目链接 -> Leetcode -122.买卖股票的最佳时机Ⅱ Leetcode -122.买卖股票的最佳时机Ⅱ 题目:给你一个整数数组 prices ,其中 prices

    48810编辑于 2024-03-01
  • 来自专栏笔记分享

    【基础算法贪心算法

    贪心算法又称贪婪算法,是一种常见的算法思想。贪心算法的优点是效率高,实现较为简单,缺点是可能得不到最优解。 贪心算法的基本思想 贪心算法就是在求解问题时,总是做出当前看来最好的选择。 贪心算法每一步只考虑局部最优解,所以在处理问题的时候可能得不到整体最优解。要使贪心算法得到最优解,问题应具备以下性质: 贪心选择性质 所求问题的整体最优解可以通过一系列局部最优解得到。 实际应用中的许多问题都可以使用贪心算法得到最优解,即使得不到最优解,也能得到最优解的近似解。所以在解决一般性问题时,我们可以大胆尝试使用贪心算法。 哈夫曼编码算法、图算法中的最小生成树Prim算法和Kruskal算法,以及计算图的单源最短路径的Dijkstra算法等都是基于贪心算法的思想设计的。 使用贪心算法进行解决。 我们通过一个简单的例子来理解贪心算法的精髓。假设现在只有9个州:ABCDEFGHI和5个广播台:12345。

    86040编辑于 2023-07-08
  • 来自专栏开心的学习之路

    贪心算法

    贪心算法的基本思想: ------求解最优化问题的算法包含一系列步骤 ------每一部都有一组选择 ------做出当前看来最好的选择 ------希望通过做出局部优化选择达到全局优化选择 - -----贪心算法不一定总产生优化解 ------贪心算法是否产生优化解,需要严格证明 贪心算法产生优化解的条件 ------贪心选择性:若一个优化问题的全局优化解可以通过局部优化选择得到,则该问题成为具有贪心选择性 ------优化子结构 与动态规划方法的比较 ------动态规划方法可用的条件:(1)优化子结构(2)子问题重叠性(3)子问题空间小 ------贪心法可用的条件:(1)优化子结构(2)贪心选择性 这是一种典型的贪心算法,它只顾眼前,但能得到最优解。 (2)部分背包问题。有n个物体,第i个物体的重量为wi,价值为vi,在总重量不超过C的情况下让总价值尽量高。 一种直观的贪心策略是:优先拿“价值除以重量的值”最大的,直到重量和正好为C。

    1.2K20发布于 2019-02-14
  • 来自专栏linux驱动个人学习

    贪心算法

    贪婪算法 贪心算法(Greedy Algorithm) 简介贪心算法,又名贪婪法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择 {看着这个名字,贪心,贪婪这两字的内在含义最为关键。 index = i; } } } return index; } 有了物品,有了方法,下面就是将两者结合起来的贪心算法 按照贪心算法的三个步骤:1.41分,局部最优化原则,先找给顾客25分;2.此时,41-25=16分,还需要找给顾客10分,然后5分,然后1分;3.最终,找给顾客一个25分,一个10分,一个5分,一个1分 ^_^;总结:贪心算法的优缺点优点:简单,高效,省去了为了找最优解可能需要穷举操作,通常作为其它算法的辅助算法来使用;缺点:不从总体上考虑其它可能情况,每次选取局部最优解,不再进行回溯处理,所以很少情况下得到最优解

    1.2K11发布于 2020-02-12
  • 来自专栏编程学习之路

    算法】之贪心算法

    欢迎记录下你的那些努力时刻(算法学习知识点/算法题解/遇到的算法bug/等等),在分享的同时加深对于算法的理解,同时吸收他人的奇思妙想,一起见证技术er的成长~ 目录 贪心算法 算法知识点 解题步骤 算法题目来源 算法题目描述 做题思路 代码 运行结果 读书笔记 ---- 贪心算法 算法知识点 贪心算法(又称贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。 贪心算法一般用来解决求最大或最小解。 贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。 虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心算法不要回溯 。

    83030编辑于 2022-11-20
  • 来自专栏WHYBIGDATA公众号同步文章

    贪心算法(Java)

    贪心算法(Java) 0、写在前面 1、贪心算法的基本要素 1.1 贪心选择性质 1.2 最优子结构性质 1.3 贪心算法与动态规划算法的差异 2、贪心算法的特点 3、贪心法的正确性证明 4、活动安排问题 也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。当然,希望贪心算法得到的最终结果也是整体最优的。 1.1 贪心选择性质 所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。 问题的最优子结构性质是该问题可用动态规划算法贪心算法求解的关键特征。 1.3 贪心算法与动态规划算法的差异 贪心算法和动态规划算法都要求问题具有最优子结构性质,这是2类算法的一个共同点。 但是,对于具有最优子结构的问题应该选用贪心算法还是动态规划算法求解? 2、贪心算法的特点 设计要素: 贪心法适用于组合优化问题. 求解过程是多步判断过程,最终的判断序列对应于问题 的最优解.

    86110编辑于 2023-01-31
  • 来自专栏爱编码

    经典算法贪心算法

    什么是贪心算法?   贪心算法,又称贪婪算法(Greedy Algorithm),是指在对问题求解时,总是做出在当前看来是最好的选择。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。 贪心算法适用的问题   贪心策略适用的前提是:局部最优策略能导致产生全局最优解。也就是当算法终止的时候,局部最优等于全局最优。 如果确定可以使用贪心算法,那一定要选择合适的贪心策略; 贪心算法的几个例子 1. 经我们分析,这种情况是不适合用贪心算法的,因为我们上面提供的贪心策略不是最优解。

    2K30发布于 2019-11-08
  • 来自专栏学习

    详解贪心算法

    贪心算法(Greedy Algorithm) 概述: 贪心算法是一种在求解最优化问题时采取的一种常用算法策略。 贪心算法的基本思想是,每次选择当前情况下的局部最优解,并相信这个局部最优解能够导致全局最优解。贪心算法通过迭代的方式一步步地构建最优解,并不进行回溯。 贪心算法的一般步骤: 1. 贪心算法的正确性需要满足两个条件: 1.最优子结构:问题的最优解能够由子问题的最优解组合而成。 2. 贪心选择性:通过局部最优选择能够得到全局最优解。 贪心算法适用的问题一般具有以下特点: 1. 贪心算法的优点是简单、高效,时间复杂度通常较低。然而,贪心算法并不适用于所有问题,有些问题需要使用其他更复杂的算法来求解。在使用贪心算法时,需要仔细分析问题的特点并证明贪心策略的正确性。 由于贪心是一种思想,没有具体的算法模板,而且贪心一般不会单独作为一种算法出现在题目中,一般会跟其他算法结合在一起出现。例如:动态规划、递归、高级数据结构等。

    67310编辑于 2024-09-23
  • 来自专栏编程学习

    算法训练之贪心

    前置知识 在真正开始贪心算法题目练习之前,我们首先要了解什么是贪心算法贪心算法有什么特点? 什么是贪心算法? ~ 从左上角开始,我们每一步都按当前位置的最优选择(局部最优解)进行,但是不难发现结果是错误的~所以我们是"希望"得到全局最优解,但是结果不一定近人意,我们就需要更改我们的贪心策略~ 贪心算法的特点 结合前面的例子,我们可以发现贪心算法有下面的特点: 一、贪心策略的提出 1.贪心策略的提出是没有标准以及模板的 2.可能每一道题的贪心策略都是不同的 二、贪心策略的正确性 /性质: 相同的分析可以得到B、C、D满足B<=1,C<=1,D<=4 我们继续来看,假设贪心算法得到的面值为20、10、5、1的张数分别为a、b、c、d~ 既然最优解是最少的张数的话, 有了前面的这些小知识点,接下来,我们就来在题目中进行实际应用贪心算法~ 柠檬水找零 柠檬水找零 这个题目告诉了我们一杯柠檬水5美元,顾客可能给5美元/10美元/20美元,最开始我们手上没有任何的美元

    27410编辑于 2025-04-15
  • 来自专栏zxctscl个人专栏

    算法贪心算法练习一

    贪心算法的介绍 一、贪心策略:解决问题的策略,局部最优->全局最优 把解决问题的过程分为若干步; 解决每一步的时候,都选择当前看起来“最优的”解法; 希望得到全局最优。 二、贪心策略的正确性 因为有可能“贪心策略”是一个错误的方法 正确的贪心策略,是需要证明的 常见的证明方法就是在数学中见过的所有证明方法。 三、学习贪心算法的方向 遇到不会的贪心题,很正常,把心态放平。 前期学习的时候,把重点放在贪心的策略上,把这个策略当做经验吸收。 如何证明贪心策略是正确的 2. 860. 二、算法原理 分情况讨论:第一种:当顾客给了5美元,就直接收下; 第二种,当顾客给了10美元,先判断一下有没有5美元,有就收下,没有就返回false; 第三种:20美元的找零,可以分一张10和一张 二、算法原理 每次挑选当前数组中,最大的那个数,然后减半,最大的数减半,才有可能最快减到数组和减少到至少一半。

    22810编辑于 2024-04-10
领券