OJ(Online judge)题库 测试用例 【贪心算法】

贪心算法与应用

我们遇到各种类型的计算问题,每一种都需要不同的技术来解决。需要最大或最小结果的问题是优化问题。

解决优化问题的方法大致有三种:

 

1.贪心法

2.动态规划

3. 分支定界技术

本文将介绍贪心方法、贪心算法的属性以及在任何问题上实现贪心方法的步骤。

什么是贪心算法?

它只是意味着选择一个目前看起来最好的选择/解决方案(贪婪)。当我们想要一个即时的情况时,这种技术最适合。它有助于解决优化问题,即给出最小结果或最大结果。

满足问题中条件的解是可行解。在所有可能的可行解中具有最小成本的解是最优解,即它是最佳解。

贪心算法的目标是找到最优解。只能有 1 个最优解。

例如:

让我们考虑集装箱装载问题的例子。

在集装箱装载问题中,一艘大型船舶装载货物。货物有大小相同但重量不同的集装箱。该船的载货量为cp。

我们需要将集装箱装载到船上,以使船上有最大的集装箱。

例如,假设总共有 4 个容器的重量:w1=20, w2=60, w33=40, w4=25。

让 cp = 80。然后,为了加载最大容器,我们将加载 container-1、3、4。

贪心算法的历史

贪心算法最初是由荷兰计算机科学家和数学家 Edsger W. Dijkstra 在计算最小生成树时创造的。许多贪心算法的主要目的是解决基于图的问题。

贪心算法在 1950 年代首次出现。当时的科学家 Prim 和 Kruskal 在这十年中也实现了最小化图成本的优化技术。

几年后,在 1970 年代,许多美国研究人员提出了解决贪心问题的递归策略。2005 年,NIST 记录将贪心范式注册为单独的优化策略。

从那时起,贪心算法被广泛应用于多个领域,包括开放最短路径优先(OSPF)等网络协议和许多其他网络数据包交换协议。

贪心算法的工作

贪心算法在不同阶段工作,并在进行时一次考虑一个输入。在每个阶段,我们都试图为我们的问题找到一个可行的解决方案,一个对那个时候的算法有好处的解决方案。这意味着我们为每个子任务做出局部最优选择。这些局部最优选择最终导致我们为我们的问题找到全局最优选择,我们称之为最终最优解。

最简单的贪心算法的伪代码如下所示:

算法贪心( A,n )
{
    解决方案:= φ; //初始化解决方案
    对于i:= 1到 n做
    {
        x :=选择(一) ;
        如果可行( solution,x )那么  
            解决方案:=联合(解决方案,x );
    }
    返回解决方案;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值