首页 > 代码库 > 贪心算法的理解

贪心算法的理解

  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就是局部最优解。

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

贪心算法的理解