首页 > 其他分享 >贪心

贪心

时间:2023-06-16 22:44:06浏览次数:33  
标签:问题 选择 算法 苹果 最优 贪心

贪心算法

概述

贪心算法总是做出 当前最好 的选择,期望通过 局部最优 选择得到 全局最优 的解决方案。贪心算法正是“活在当下,看清楚眼前”的算法,从问题的 初始解 开始,一步步地做出当前最好的选择,逐步逼近问题的目标,尽可能得到 最优解 ;即使得不到最优解,也可以得到最优解的 近似解 .

贪心算法并 不是从整体最优来考虑的 ,它所作出的选择只是某种意义上的 局部最优 。对许多问题可以使用贪心算法得到整体最优解或整体最优解的近似解。

本质

可以使用贪心算法的情况:问题具有两个特征—— 贪心选择性质最优子结构性质

  1. 贪心选择性质
    贪心选择性质指原问题的 整体最优解 可以通过 一系列 局部最优 的选择得到。应用 同一规则 ,将原问题变为一个 相似的、但规模更小的 子问题,而后的每一步都是 当前最优 的选择。这种选择依赖于 已做出 的选择,但不依赖于未做出的选择。运用贪心算法解决的问题在程序运行过程中 无回溯 过程。
  2. 最优子结构性质
    当一个问题的最优解 包含子问题的最优解 时,称此问题具有 最优子结构性质 。问题的 最优子结构性质 是该问题是否可以用贪心算法求解的 关键例如: 原问题$ S = {a_1,a_2,…,a_i,…,a_n} $,通过贪心选择出一个当前最优解 $ {a_i}$ 之后,转化为求解子问题 $ S - {a_i} $ ,如果原问题的最优解包含子问题的最优解,则说明该问题满足最优子结构性质。

贪心算法的 求解步骤 如下。

(1) 贪心策略 。指确定贪心策略,选择 当前看上去最好的一个比如: 挑选苹果,如果你认为 个头大 的是最好的,那么每次都从苹果堆中拿一个 最大的 作为 局部最优解 ,贪心策略就是选择当前 最大的苹果 。如果你认为 最红的 苹果是最好的,那么每次都从苹果堆中拿一个 最红的 ,贪心策略就是选择当前 最红的苹果 。因此根据求解目标的不同,贪心策略也会不同。

(2) 局部最优解 。指根据贪心策略,一步步地 得到局部最优解 。比如第1次选一个最大的苹果放起来,记为 \(a_1\) ;第2次再从剩下的苹果中选择一个最大的苹果放起来,记为 \(a_2\) ,以此类推。

(3) 全局最优解 。指把所有的局部最优解都合成原问题的一个最优解 \(\{a_1,a_2……\}\) 。

标签:问题,选择,算法,苹果,最优,贪心
From: https://www.cnblogs.com/Ifyoung/p/17486643.html

相关文章

  • 递归、分治、动态规划、贪心、回溯、分支限界
    递归、分治、动态规划、贪心、回溯、分支限界 相似算法比较:递归、分治、动态规划、贪心、回溯、分支限界​ 在学习算法的过程中,递归、分治、动态规划、贪心、回溯、分支限界这些算法有些类似,都是为了解决大问题,都是把大问题拆分成小问题来解决,但她们之间还是有一些不同之......
  • 【技术积累】算法中的贪心算法【二】
    如何证明一个问题可以使用贪心算法解决?判断一个问题是否可以使用贪心算法解决,通常需要满足两个条件:贪心选择性质:问题的最优解可以通过一系列局部最优解得到。也就是说,在每一步选择中,都选择当前最优解,而不考虑之后的影响。最优子结构性质:问题的子问题的最优解可以推导出原问题......
  • 【技术积累】算法中的贪心算法【一】
    贪心算法是什么贪心算法是一种常见的算法思想,主要应用于优化问题中,特别是在计算机科学和运筹学领域中。贪心算法的核心思想是每一步都选择当前最好的选项,从而得到全局最优解。贪心算法通常包括以下步骤:确定问题的最优子结构:即在问题中寻找那些可以自行解决的子问题。开始......
  • 6. 贪心
    6.1区间问题例题:AcWing905.区间选点题目:给定\(n\)个闭区间\([l_i,r_i]\),在数轴上选出最少数量的点,使得每个区间至少包含一个被选择的点。\(1\len\le10^5,-10^9\lel_i,r_i\le10^9\)。思路:贪心的想法是很显然的:先将所有区间按左端点排序。定义\(L=l_1,R=r_1,cnt=1\),......
  • (贪心+搜索+剪枝)P8801 [蓝桥杯 2022 国 B] 最大数字
    题目描述给定一个正整数 N。你可以对 N 的任意一位数字执行任意次以下2种操作:将该位数字加 1。如果该位数字已经是 9,加 1 之后变成 0。将该位数字减 1。如果该位数字已经是 0,减 1 之后变成 9。你现在总共可以执行 1 号操作不超过 A 次,2 号操作不......
  • 1821D - Black Cells(暴力贪心枚举)
    大意加思路:相当于有一个绳子,其中有n段可以上色,如果要给一段上色代价增加2,没向前走一步代价加一,可以看出代价最多可以去对掉长度为一的段落,因为最后要给x个点上色代价做少为x,而前面的段落给1个点上色代价最少为2,另外要考虑最后一段可能没有完全上色。点击查看代码#include<bits/......
  • 算法学习day37贪心part06-738、968
    packageLeetCode.greedypart06;/***738.单调递增的数字*当且仅当每个相邻位数上的数字x和y满足x<=y时,我们称这个整数是单调递增的。*给定一个整数n,返回小于或等于n的最大数字,且数字呈单调递增。*示例:*输入:n=332*输出:299**/public......
  • 算法学习day35贪心part04-860、406、452
    packageLeetCode.greedypart04;/***860.柠檬水找零*在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单bills支付的顺序)一次购买一杯。*每位顾客只买一杯柠檬水,然后向你付5美元、10美元或20美元。你必须给每个顾客正确找零,也就是说净交易是每......
  • 算法学习day36贪心part05-435、763、56
    packageLeetCode.greedypart05;importjava.util.Arrays;/***435.无重叠区间*给定一个区间的集合intervals,其中intervals[i]=[starti,endi]。返回需要移除区间的最小数量,使剩余区间互不重叠。*示例:*输入:intervals=[[1,2],[2,3],[3,4],[1,3]]*输出......
  • 字符串解压缩问题——贪心算法
     importsysdefload_data():returnsys.stdin.read()defget_position_map(s):result={}stack=[]fori,cinenumerate(s):ifc=="[":result[i]=-1stack.append(i)elifc=="......