📜  数据结构-贪心算法

📅  最后修改于: 2021-01-11 06:39:00             🧑  作者: Mango


设计了一种算法来针对给定问题实现最佳解决方案。在贪婪算法方法中,决策是从给定的解决方案域中做出的。由于贪婪,选择了似乎提供最佳解决方案的最接近的解决方案。

贪婪算法试图找到局部最优解,最终可能导致全局最优解。但是,通常,贪心算法不会提供全局优化的解决方案。

计数硬币

这个问题是通过选择尽可能少的硬币来计数到期望值,并且贪婪方法迫使算法选择最大可能的硬币。如果我们给我们提供了₹1、2、5和10的硬币,并且要求我们计数₹18,那么贪婪过程将为-

  • 1-选择一个₹10硬币,剩余数量为8

  • 2-然后选择一个₹5硬币,剩余数量为3

  • 3 −然后选择一个₹2硬币,剩余计数为1

  • 4-最后,选择1个₹1硬币解决了这个问题

虽然,这似乎工作正常,但对于此计数,我们只需要选择4个硬币。但是,如果我们稍微改变问题,则相同的方法可能无法产生相同的最佳结果。

对于货币系统,我们拥有1、7、10枚硬币,对18枚硬币进行计数绝对是最佳选择,但对于15枚硬币,则可能会使用过多的硬币。例如,贪婪方法将使用10+。 1+ 1+ 1+ 1+ 1,总计6个硬币。而仅使用3个硬币(7 + 7 + 1)可以解决相同的问题

因此,我们可以得出这样的结论:贪婪的方法选择了立即优化的解决方案,而在全局优化是一个主要问题时可能会失败。

例子

大多数联网算法都使用贪婪方法。这是其中一些的列表-

  • 旅行商问题
  • Prim的最小生成树算法
  • Kruskal的最小生成树算法
  • Dijkstra的最小生成树算法
  • 图形-地图着色
  • 图形-顶点覆盖
  • 背包问题
  • 作业调度问题

许多类似的问题都使用贪婪方法来找到最佳解决方案。