数据结构 - Greedy算法

算法旨在为给定问题实现最佳解决方案.在贪心算法方法中,决策是从给定的解决方案域做出的.由于贪婪,选择了似乎提供最佳解决方案的最接近的解决方案.

Greedy算法试图找到一个本地化的最优解决方案,最终可能导致全局优化的解决方案.但是,通常Greedy算法不提供全局优化的解决方案.

计算硬币

这个问题是通过选择尽可能少的数量来计算所需的值硬币和贪婪的方法迫使算法选择最大可能的硬币.如果我们提供₹1,2,5和10的硬币,我们被要求计算₹18,那么贪婪的程序将是 :

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

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

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

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

虽然它似乎工作正常,但我们需要这个数量只挑4个硬币.但是,如果我们稍微改变问题,那么相同的方法可能无法产生相同的最佳结果.

对于货币系统,我们有硬币值为1,7,10的值,计算值为18的硬币将是绝对最佳的,但对于15的计数,它可能使用比必要更多的硬币.例如,贪婪的方法将使用10 +加; 1 +  1 +  1 +  1 +  1,共6个硬币.而同样的问题只能通过使用3个硬币来解决(7 +  7 +  1)

因此,我们可以得出结论,贪婪的方法选择了一个立即优化的解决方案,并可能在哪里失败全局优化是一个主要问题.

示例

大多数网络算法都使用贪婪方法.以下是其中一些去的列表;

  • 旅行推销员问题

  • Prim的最小跨度树算法

  • Kruskal的最小生成树算法

  • Dijkstra的最小生成树算法

  • 图形 - 地图着色

  • 图表 - 顶点封面

  • 背包问题

  • 作业调度问题

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