贪心算法的理解

author author     2022-08-02     706

关键词:

  1. 什么是贪心算法?

    贪心算法从步步最优,到达全局最优。

  2. 什么时候能够使用贪心算法?

    一般来说,凡是经过数学归纳法证明可以采用贪心法的情况都应该采用它,因为它具有高效性。

    通常还有另外一个方法来判断,如果一个问题具有这两大性质,那么使用贪心法来对其求解总能求

    得最优解。

    1.最优子结构性质

    当一个问题的最优解一定包含其子问题的最优解时,称此问题具有最优子结构性质。如何理解?换句话说:最优解一定是子问题的最优解组合而成的。(这个好像是从后到前的看问题)。

    2.贪心选择性质

    贪心选择性质时指所求问题的整体最优解可以通过一系列局部最优的选择获得,即通过一系列的逐步局部最优选择使得问题最终的选择方案是全局最优的。(这个是从前往后看问题)

  3. 贪心算法解题步骤即算法设计模式

    利用贪心法求解问题的过程通常包含如下三个步骤:

    (1)分解:将原问题分解为若干个相互独立的阶段。

    (2)解决:对于每个阶段依据贪心策略进行贪心选择,求出局部的最优解。

    (3)合并:将各个阶段的解合并为原问题的一个可行解。

    Greedy(A,n)

    {

    //A[0:n-1]包含n个输入,即A是问题的输入集合

    将解集合solution初始为空

    for(int i=0;i<n;i++)

    {

    x=select(A);//依据贪心选择策略做贪心选择,求得局部最优解

    if(x可以包含在solution)//判断解集合solution在加入x后是否满足约束条件

    {

    solution=union(solution,x);//部分局部最优解进行合并

    }

    return ( 解向量 solution); //n个阶段完成后,得到原问题的最优解


    }

    示例如下:这里的A,可以作为要(10枚钱币中,选择最少的个数,来达到100元,A就是这些钱币集合)solution就是局部最优解。

本文出自 “简答生活” 博客,转载请与作者联系!

动态规划和分治法,贪心算法以及递归的再一次深刻理解和体会

...也就越深刻。下面我们来重新体会下分治法,动态规划,贪心法,递归的理解。1.分治法:  将问题分成单独的阶段,每个阶段互相不干扰很独立,如10米长的木棍,切成10段,每段去解决每一段的问题。(阶段没有关系)... 查看详情

算法设计与分析报告

  这门课主要讲了贪心、递归、回溯、分支定界、动态规划等几种算法。  在进行学习之前有做过相关题目,所以在听课的时候感觉好理解了许多。没学这门课的时候总是想因为没学ACM课感到惋惜。  1.贪心算法    ... 查看详情

五大算法思想—贪心算法

怎么理解  贪心法在解决这个问题的策略上目光短浅,仅仅依据当前已有的信息就做出选择,并且一旦做出了选择。无论将来有什么结果,这个选择都不会改变。  一句话:不求最优,仅仅求可行解。怎样推断   对于... 查看详情

贪心算法

...https://www.cnblogs.com/gavanwanggw/p/7141358.html怎么理解   贪心法在解决这个问题的策略上目光短浅,仅仅依据当前已有的信息就做出选择,并且一旦做出了选择。无论将来有什么结果,这个选择都不会改变。   一句话:不... 查看详情

贪心算法(java)(代码片段)

贪心算法:贪心算法的主要思想是,在既定的策略下总是能在当前求出当前的最优解(局部最优解)而不是全局最优解。只是这样说可能比较难理解,下面从两道leetcode上的题目入手,来体会贪心算法。1.... 查看详情

前端也能学算法:由浅入深讲解贪心算法(代码片段)

贪心算法是一种很常见的算法思想,而且很好理解,因为它符合人们一般的思维习惯。下面我们由浅入深的来讲讲贪心算法。找零问题我们先来看一个比较简单的问题:假设你是一个商店老板,你需要给顾客找零n元钱,你手上... 查看详情

一看就懂的贪心算法

如何理解贪心算法我们先看一个例子假设有一个可以容纳100kg物品的背包,背包可以装各种物品,我们有以下五种豆子,每种豆子的重量和总价值各不相同。为了让背包中所装物品的总价值最大,我们如何选择在... 查看详情

uva1614hellonthemarkets(算法效率--贪心)

...静静地继续做一个口胡选手...←_←但是因为这题的贪心实在是太厉害了!我就单看,就盯了题解半小时以上...而代码又那么短,我就打了代码了...其实我又不太理解为什么一定要排序。)贪心部分的理论依据:前i个数可以... 查看详情

贪心算法——huffman压缩编码的实现

1.如何理解“贪心算法”假设我们有一个可以容纳100Kg物品的背包,可以装各种物品。我们有以下5种豆子,每种豆子的总量和总价值都各不相同。怎样装才能让背包里豆子的总价值最大呢?这个问题其实很简单,我们只需要计算... 查看详情

贪心算法-最小生成树kruskal算法和prim算法

Kruskal算法:不断地选择未被选中的边中权重最轻且不会形成环的一条。简单的理解:不停地循环,每一次都寻找两个顶点,这两个顶点不在同一个真子集里,且边上的权值最小。把找到的这两个顶点联合起来。初始时,每个顶... 查看详情

17贪心算法剪绳子(代码片段)

...的话,dp数组就要用大数类BigInteger但是,还有一种解法,贪心算法题目同上思路原本打算用大数类的dp数组但是看了下贪心的解法,也很容易理解就是一直乘3,收获大数类的使用头文件是java.math.BigInteger初始化函数是BigInteger(Str... 查看详情

贪心算法

贪心算法具有最优子问题结构,它的特点是“短视”,每次选择对当前局面最有利的决策,来一步步获得最优解。我个人认为,贪心不是一个具体的方法,而是一类方法,贪心算法的关键不在于想到,而在于正确性的证明。要证... 查看详情

leetcode面试刷题技巧-贪心算法题习题集(代码片段)

今天介绍一种解决常规的贪心策略或者字典排序的题目的通用解题方法。第一题,leetcode中等难度题目先来一道简单的字典序排列的问题,这个题目我这里不会用最优解来解决这个问题,这个是leetcode的中等难度的题目,最优解... 查看详情

贪心算法

贪心算法一、基本概念:     所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。    贪... 查看详情

动态规划算法的理解

...算法其实质就是分治思想和解决冗余。因此它与分治法和贪心法类似,都是将待求解问题分解为更小的,相同的子问题,然后对子问题进行求解,最终产生一个整体最优解。适合采用动态规划法求解的问题,经分解得到的各个子... 查看详情

贪心算法

贪心算法什么是贪心算法?贪心算法是指对问题求解时,总是做出在当前看来时最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有的问题都能得到整体最优解,关键是贪... 查看详情

贪心算法及其理论依据——拟阵

  贪心算法主要采用局部最优的解决问题的策略,但是在很多时候都不能达到全局最优的效果,那么什么时候使用贪心算法能够得到全局最优呢?就此引出拟阵的概念。贪心算法的一般步骤确定待解问题的最优子结构设计递归... 查看详情

五大常用算法之一:贪心算法

参考技术A所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,换句话说,当考虑做何种选择的时候,我们只考虑对当前问题最佳的选择而不考虑子问题的结果。这是贪心算法可行的第一个基本要素。... 查看详情