📜  贪婪算法

📅  最后修改于: 2020-09-28 02:23:48             🧑  作者: Mango

在本教程中,您将学习什么是贪婪算法。此外,您还会找到一个贪婪方法的示例。

贪婪算法是一种通过选择当前可用的最佳选项来解决问题的方法,而无需担心它会带来的未来结果。换句话说,本地最佳选择旨在产生全球最佳结果。

对于所有问题,该算法可能都不是最佳选择。在某些情况下可能会产生错误的结果。

该算法永远不会返回来扭转所做出的决定。该算法以自顶向下的方式工作。

该算法的主要优点是:

  1. 该算法更易于描述
  2. 该算法的性能可能优于其他算法(但并非在所有情况下都如此)。

可行的解决方案

一种可行的解决方案是为问题提供最佳解决方案的解决方案。


贪婪算法

  1. 首先,解决方案集(包含答案)为空。
  2. 在每个步骤中,将一个项目添加到解决方案集中。
  3. 如果解决方案集可行,则保留当前项目。
  4. 否则,该项目将被拒绝,不再考虑。

示例-贪婪方法

Problem: You have to make a change of an amount using the smallest possible number of coins.
Amount: $28

Available coins:
  $5 coin
  $2 coin
  $1 coin

解:

  1. 创建一个空的solution-set = {}
  2. 硬币= {5,2,1}
  3. 总和= 0
  4. 总和≠28时 ,请执行以下操作。
  5. 硬币中选择一个硬币C ,使之和+ C <28
  6. 如果C + sum> 28 ,则不返回任何解。
  7. 否则, sum = sum + C。
  8. C添加到solution-set

在前5次迭代之前,解决方案集包含5个5美元的硬币。之后,我们得到1个 2美元硬币,最后得到11美元硬币。


贪婪算法应用

  • 选择排序
  • 背包问题
  • 最小生成树
  • 单源最短路径问题
  • 作业调度问题
  • Prim的最小生成树算法
  • Kruskal的最小生成树算法
  • Dijkstra的最小生成树算法
  • 霍夫曼编码
  • 福特-富克森算法