贪心算法,一个的吃货理解

在这里插入图片描述

关注微信公众号:[一起学习大数据呀] 让奇怪的知识 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] 物流配送问题中贪心算法与动态规划法的分析与应用

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值