AYE89

coding & learning

导航

贪心算法

Posted on 2018-04-04 11:06  AYE89  阅读(243)  评论(0编辑  收藏  举报

一、面向的问题

问题

在问题的解空间中,搜索满足约束方程并使用目标函数达极值的解向量(集合中寻找最优子集)。

这类问题具有以下特点:

  • 由初始输入构成的解空间;
  • 约束方程,确定可行解;
  • 目标函数(优化目标),确定最优解;

 

算法设计

适用贪心算法的问题有两个主要性质

  • 贪心选择性:全局最优解,可以由一系列局部最优选择来达到;每次选择得到一个局部最优解,并把问题转化为一个规模更小的类似子问题。
  • 最优子结构:指一个问题的最优解中包含其子问题的最优解。

使用贪心算法第一步,是证明问题具有“最优子结构性质”,从而贪心算法收敛;

 

二、问题的解决

算法伪代码

greedy(A, n)
{
    solution = Q;
    for (i=1;i<n;i++){
            x = select(A);
            if (feasible(solution, x))
                  solution = union(solution, x);
     }
      return solution;      
}  

包含了三种行为:

  • select
  • feasible
  • union

 

三、典型例子

背包问题等

 Dijkstra最短路径