开发手册 欢迎您!
软件开发者资料库

数据结构 - Greedy算法

数据结构Greedy算法 - 使用c,C ++和Java学习数据结构和算法,从简单和简单的步骤开始,从基本到高级概念,包括概述,环境设置,算法,渐近分析,贪婪算法,分而治之,动态编程,数据结构,数组,链接列表,双链表,循环列表,堆栈,解析表达式,队列,优先级队列,线性,二进制,插值搜索,树,树遍历,二进制搜索树,B +,AVL,跨越,河内塔,哈希表,堆,图,深度,广度优先遍历,搜索技术,排序技术,排序算法,泡沫,合并排序算法,插入,选择,壳,快速排序,递归,斐波那契系列。

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

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的最小生成树算法

  • 图形 - 地图着色

  • 图表 - 顶点封面

  • 背包问题

  • 作业调度问题

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