OJ(Online judge)题库 测试用例 【贪心算法】
时间:2023-01-17 22:30:00
贪婪算法与应用
我们遇到了各种各样的计算问题,每种都需要不同的技术来解决。最大或最小的结果是优化。
大致有三种方法可以解决优化问题:
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 ); } 返回解决方案; }