贪心算法

特性

做出的是局部最优的,但不一定是整体最优。

往往比动态规划效率高,虽然可能求不到最优解,可能会求得最优解的近似解。

性质

贪心选择性质

整体最优解可通过一系列局部的最优选择来达到

是自顶向下的(与动态规划相反)

最优子结构性质

与动态规划相同

要证明贪心算法的正确性就要证明是否满足这两个性质

例子

  • 背包问题

固定的重量条件下,装下的物品尽可能总价值最大。

不是0-1背包,是可以装的数量x(0<=x<=1)。

这样的背包的贪心策略是每次选择单位价值最大的物品装进去。

  • 活动安排问题

对于共享一个资源的一系列活动,要在固定时间内,尽量安排多的活动。

把活动按结束时间从早到晚排序,策略是每次选择结束时间最早的且与上一个选中的活动兼容的活动。

  • 最优装载

要求:在固定总重量的条件下,不同重量的系列箱子,装尽可能多的箱子。

策略:每次选择最轻的箱子。

  • 单源最短路径

要求:求图中对于给定源点v,它到其它点的最短路径

策略:每次选择不在已选择集合并且到源点距离最近的点

  • 最小生成树MST

MST性质:图分裂成两个集合,则这两个集合的最小连通的边一定会出现在最小生成树

  1. Prim——最近顶点

每次选择在两个集合(已选择集合和未选择集合)之间的最短边

  1. Kruskal

每次选择所有边的最短边。

 

 

  • 多机调度

要求:m个机器尽可能短的时间内完成n个作业

策略:最长作业优先

posted @ 2014-08-10 20:13  Fanny123  阅读(284)  评论(0编辑  收藏  举报