贪心算法

贪婪算法
维基百科,自由的百科全书

贪婪的算法决定了在进行更改时要提供的最小硬币数量。这些是人类用一个贪婪的算法代表36美分的步骤,只使用值为{1,5,10,20}的硬币。最高价值的硬币,低于剩余的变化,是局部最优的。(请注意,一般来说,变更问题需要动态编程或整数规划才能找到最佳解决方案;但是,大多数货币系统(包括欧元和美元)都是贪婪策略确实找到最佳解决方案的特殊情况。
甲贪婪算法是一个算法的范例下面的解决问题的 启发式在每个阶段作出局部最优选择的[1]与找到的希望全局最优。在许多问题中,贪婪策略通常不会产生最佳解决方案,但是贪婪的启发式方法可能产生局部最优解,在合理的时间内逼近全局最优解。

例如,旅行商问题(计算复杂度高)的贪婪策略是以下启发式:“在每个阶段访问离当前城市最近的未访问城市”。这种启发式方法不需要找到一个最佳的解决方案,而是终止于合理的步骤; 寻找最佳解决方案通常需要不合理的多个步骤。在数学优化中,贪心算法解决了具有矩阵特征的组合问题。

内容 [ 隐藏 ]
1 细节
1.1 失败的案例
2种 类型
3个 应用
4 例子
5 另见
6 注释
7 参考
8 外部链接
细节[ 编辑]
一般来说,贪婪算法有五个部分:

一个候选集,从中创建一个解决方案
选择功能,选择最佳的候选人被添加到解决方案
一个可行性函数,用于确定候选人是否可以用于解决方案
一个目标函数,它将一个值赋给一个解,或者一个部分的解
一个解决方案的功能,这将表明我们什么时候发现了一个完整的解
贪婪的算法在某些数学问题上产生了很好的解决方案,但是在其他方面则不然 他们工作的大多数问题将有两个属性:

贪婪的选择财产
我们现在可以做出最好的选择,然后解决后来出现的子问题。贪婪算法的选择可能取决于迄今为止所作的选择,而不取决于未来的选择或子问题的所有解决方案。它迭代地做出一个接一个的贪婪选择,把每个给定的问题都缩小成一个小问题。换句话说,贪婪的算法从来不会重新考虑它的选择。这是与动态编程的主要区别,这是详尽的,并保证找到解决方案。
在每个阶段之后,动态规划基于前一阶段做出的所有决策作出决定,并且可以重新考虑前一阶段的解决方案的算法路径。

最佳的子结构
“如果问题的最佳解决方案包含子问题的最佳解决方案,则问题展现出最佳的子结构。” [2]
失败案例[ 编辑]
贪心算法可能无法实现最佳解决方案的例子。

从A开始,贪婪算法将在“m”处找到局部最大值,而忽略“M”处的全局最大值。

为了达到最大和,在每一步,贪婪算法将选择看起来是最优的立即选择,所以它会在第二步选择12而不是3,并且不会达到最佳解决方案,包含99。
对于许多其他问题,贪婪算法无法产生最佳解决方案,甚至可能会产生独特的最糟糕的解决方案。一个例子是上面提到的旅行推销员问题:对于每个城市数目,都有一个城市之间的距离的分配,最近的邻居启发式产生独特的最坏可能的游览。[3]

类型[ 编辑]
贪婪的算法可以被描述为“短视”,也被称为“不可恢复的”。它们仅适用于具有“最佳子结构”的问题。尽管如此,对于许多简单的问题(例如给予改变),最合适的算法是贪婪算法。然而,重要的是要注意,贪婪算法可以用作选择算法来优先考虑搜索内的选项或分支定界算法。贪婪算法有一些变化:

纯贪婪算法
正交贪婪算法
轻松的贪婪算法
应用程序[ 编辑]
大多数贪婪算法(但并不总是)找不到全局最优的解决方案,因为它们通常不会对所有数据进行彻底的操作。他们可以过早做出某些选择的承诺,以防止他们在以后找到最好的整体解决方案。例如,对于图着色问题和所有其他NP完全问题,所有已知的贪婪着色算法都不能一致地找到最优解。不过,它们是有用的,因为它们很快就会思考并且经常给出最佳的近似值。

如果一个贪婪的算法可以被证明能产生一个给定的问题类别的全局最优值,那么它通常会成为选择的方法,因为它比其他优化方法如动态规划更快。这样的贪婪算法的例子是寻找最小生成树的Kruskal算法和Prim算法以及寻找最佳Huffman树的算法。

理论拟阵,以及更一般的理论广义拟阵,提供整个阶级的这种算法。

贪婪算法也出现在网络路由中。使用贪婪路由,消息被转发到与目的地“最近”的相邻节点。节点位置的概念(以及“接近”)可以由其物理位置来确定,如在自组织网络所使用的地理路由中。位置也可以是完全人为的构造,如在小世界路由和分布式哈希表中。

示例[ 编辑]
该活动选择问题是这一类的问题,其目的是挑不相互冲突活动的最大数目的特征。
In the Macintosh computer game Crystal Quest the objective is to collect crystals, in a fashion similar to the travelling salesman problem. The game has a demo mode, where the game uses a greedy algorithm to go to every crystal. The artificial intelligence does not account for obstacles, so the demo mode often ends quickly.
The matching pursuit is an example of greedy algorithm applied on signal approximation.
A greedy algorithm finds the optimal solution to Malfatti’s problem of finding three disjoint circles within a given triangle that maximize the total area of the circles; it is conjectured that the same greedy algorithm is optimal for any number of circles.
A greedy algorithm is used to construct a Huffman tree during Huffman coding where it finds an optimal solution.
In decision tree learning, greedy algorithms are commonly used, however they are not guaranteed to find the optimal solution.
See also[edit]
图标 Computer Science portal
图标 Mathematics portal
Epsilon-greedy strategy
Greedy algorithm for Egyptian fractions
Greedy source
Matroid
Notes[edit]
跳起来 ^ Black, Paul E. (2 February 2005). “greedy algorithm”. Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology (NIST). Retrieved 17 August 2012.
跳起来 ^ Introduction to Algorithms (Cormen, Leiserson, Rivest, and Stein) 2001, Chapter 16 “Greedy Algorithms”.
跳起来 ^ (G. Gutin, A. Yeo and A. Zverovich, 2002)
References[edit]
Introduction to Algorithms (Cormen, Leiserson, and Rivest) 1990, Chapter 17 “Greedy Algorithms” p. 329.
Introduction to Algorithms (Cormen, Leiserson, Rivest, and Stein) 2001, Chapter 16 “Greedy Algorithms”.
G. Gutin, A. Yeo and A. Zverovich, Traveling salesman should not be greedy: domination analysis of greedy-type heuristics for the TSP. Discrete Applied Mathematics 117 (2002), 81–86.
J. Bang-Jensen, G. Gutin and A. Yeo, When the greedy algorithm fails. Discrete Optimization 1 (2004), 121–127.
G. Bendall and F. Margot, Greedy Type Resistance of Combinatorial Problems, Discrete Optimization 3 (2006), 288–298.
External links[edit]
Wikimedia Commons has media related to Greedy algorithms.
Hazewinkel, Michiel, ed. (2001) [1994], “Greedy algorithm”, Encyclopedia of Mathematics, Springer Science+Business Media B.V. / Kluwer Academic Publishers, ISBN 978-1-55608-010-4
Python的贪婪硬币诺亚礼品的例子。
[ 隐藏 ] v Ť Ë
优化:算法,方法和启发式
[ show ]
非约束非线性:方法 调用…
Graph of a strictly concave quadratic function with unique maximum.
[ show ]
约束非线性
[ show ]
凸优化
[ 隐藏 ]
组合
范式
近似算法 动态编程 贪婪算法 整数编程 分支和绑定 / 剪切

算法
最小
生成树
贝尔曼 - 福特 Borůvka Dijkstra算法 弗洛伊德 - 沃肖尔 约翰逊 克鲁斯卡
网络流量
迪尼奇 埃德蒙兹 - 卡普 福特 - 富尔克森 推重标志最大流量
[ show ]
启发式
软件
类别:优化算法和方法组合算法矩阵理论交换算法
导航菜单
未登录谈论捐款创建帐号登录文章谈论读编辑查看历史搜索

Search Wikipedia

主页
内容
典型内容
现在发生的事
随机文章
捐赠给维基百科
维基百科商店
相互作用
帮帮我
关于维基百科
社区门户
近期变动
联系页面
工具
什么链接在这里
相关更改
上传文件
特殊页面
永久链接
页面信息
Wikidata项目
引用此页
打印/导出
创建一本书
下载为PDF
可打印版本
在其他项目
维基共享资源
语言
العربية
Azərbaycanca
加泰罗尼亚语
Čeština
丹麦语
德语
西班牙语
巴斯克语
فارسی
法语
한국어
意大利语
עברית
匈牙利
Монгол
日本语
挪威
波兰语
葡萄牙语
Русский
简单的英语
斯洛伐克语
斯洛文尼亚语
Српски/ srpski
芬兰语
瑞典语
ไทย
Українська
TiếngViệt
中文
编辑链接
本页面最后编辑于2017年4月19日23:08。
文字下是可用的知识共享署名-相同方式共享许可 ; 附加条款可能适用。使用本网站即表示您同意使用条款和隐私政策。维基百科®是维基媒体基金会,一个非营利组织的注册商标。
隐私政策关于维基百科免责声明联系维基百科开发商Cookie语句移动视图Enable previews
Wikimedia Foundation Powered by MediaWiki

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值