贪心算法

来源:互联网 发布:淘宝人群画像分析 编辑:程序博客网 时间:2024/06/11 04:53

一,贪心算法的思想

贪心算法通过一系列的选择得到问题的最优解,它做出的每一个选择都是当前状态下的局部最优解,即贪心选择。


二,贪心算法的基本要素

贪心算法求解的问题的一般特征

1,贪心选择性质

是指所解问题的最优解可以通过一系列局部最优解的选择,即贪心选择来达到。


2,最优子结构性质

当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。


三,贪心算法与动态规划的区别

1,贪心算法和动态规划算法都要求问题具有最优子结构性质,这是两类算法的共同点。

2,贪心选择性质是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。在动态规划算法中,每步所作出的选择往往依赖于相关子问题的解,因而只有在解出相关子问题后,才能作出选择。在贪心算法中,仅在当前状态下作出最优选择,即局部最优选择,然后再去解出做出这个选择后产生的相关子问题。正是由于这种差别,动态规划算法通常以自底向上的方式解各个子问题,而贪心算法通常以自顶向下的方式进行,以迭代方式做出相继的贪心选择,每做一次贪心选择就将所求问题转换为规模更小的子问题。


四,常见的使用贪心算法求解的问题

1,活动安排问题

struct Interval{    int start;    int end;};void GreedySelector(vector<Interval> &intervals, vector<bool> &A){    int pre = 0;    A[0] = true;    for(int i = 1; i < intervals.size(); i ++){        if(intervals[i].start >= intervals[pre].end){            A[i] = true;            pre = i;        } else {            A[i] = false;        }    }}

0 0
原创粉丝点击