贪心算法,一个的吃货理解
Posted 一起学大数据呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法,一个的吃货理解相关的知识,希望对你有一定的参考价值。
关注微信公众号: [一起学习大数据呀] 让奇怪的知识 UP!
前言
“人要活在当下”,“看清楚眼前”。而“活在当下,看清楚眼前”的办法,从问题的初解出发,一步步做出当前最好的选择,逐步逼近目标。这就是贪心算法的本质。
只讨论文字,不涉及代码。作者水平有限,难免遗漏错误,欢迎读者们留言指正。
概念
什么是贪心算法呢?所谓贪心算法是指,在对问题求解时,总是做出在当前看来最好的选择。也就是说,不从整体最优解出发来考虑,它所做出的仅是在某种意义上的局部最优解。
换句话说,把一个大问题,分成若干的小问题,而每个小问题都能取得局部最优解,累加起来,这样我们可能得到总体的最优解,注意是可能!
基本思路
1.建立数学模型来描述问题。
2.把求解的问题分成若干个子问题。
3.对每一子问题求解,得到子问题的局部最优解。
4.把子问题的解局部最优解合成原来解问题的一个解。
具体例子
潮州美食
举个例子,五一我去了趟潮州了,可是时间有限,我如何才能在最短时间内,吃更多的美食呢?这里的更多就是我“贪心”的表现!
我先选址好酒店住处,然后在地图上建模,列出我想吃的美食,看地图的分散情况。建立数学模型来描述问题。
就近原则,先吃酒店最近的。对每一子问题求解,得到子问题的局部最优解。
吃完酒店第一个最近的美食,在此基础上,去寻找下一家美食,哪怕最后时间用完了,那我也能在最短时间内吃到最美食。把子问题的解局部最优解合成原来解问题的一个解。
送快递
哪儿都通的快递员在华北地区配送快递,快递公司(货物囤积地),我们姑且记为 P 点,快递员需要派送 4 份快递,分别送往 A,B,C,D ,4 个地点。
每两个地点之间的距离已标出,快递员如何快速规划路线,以最短路径、最小时间完成快递的配送。
现在我们通过来解决这一问题,采用最近邻点策略(就近原则):从快递站(即 P 点)出发,每次在没有到过的中选择距离当前所在地中最近的一个,直到经过了所有的配送需求地,完成了所有配送任务,最后回到快递公司,即 P 点。
具体求解流程如下:
1)了解要求送达地点的的数量与各地点之间的距离。
2)重复以下两步直至已全部送达:(1)循环遍历找到与当前出发地点最近的未到达过的配送需求地;(2)以当前找到的(最近一次找到的)送达地点为出发地点,重复步骤(1)。
3)回到出发地点。
综上所述:
1、快递员从 P 点选择较近的 A 点作为目的地。(PA = 4,最小).
2、到达 A 点后,选择距离当前出发点 A 较近的点,且 P 点已访问过,故选择 B 点(AB = 15 < AC = 15)。
3、而后依次按照此规则选择配送需求点,当所有快递配送完毕返回 P 点,即快递公司所在地。
4、路线为 P ==>A ==>B ==>C ==> D ==> P。路程为 S = PA + AB + CD + DP = 37。
适用性问题
任何技术或者框架不可能是万金油,贪心策略也有局限性。
适用前提是:局部最优策略能导致产生全局最优解。也就是当算法终止的时候,局部最优等于全局最优。
缺点是目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。
References
[1]
五分钟了解一下什么是「贪心算法 」
[2] 物流配送问题中贪心算法与动态规划法的分析与应用
以上是关于贪心算法,一个的吃货理解的主要内容,如果未能解决你的问题,请参考以下文章