物联网技术部培训---贪心算法

人心不足蛇吞相

从前有一个很穷的人救了一条蛇的命,蛇为了报答他的救命之恩,于是就让这个人提出要求,满足他的愿望。这个人一开始只要求简单的衣食,蛇都满足了他的愿望,后来慢慢的贪欲生起,要求做官,蛇也满足了他。一直到他做了宰相,还不满足,还要求做皇帝。蛇此时终于明了,人的贪心是永无止境的,于是一口就把这个人吞吃掉了。
所以,蛇吞掉的是宰相,而不是大象。故此,留下了“人心不足蛇吞相”的传说。

贪心本质

一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优从而得到全局最优的解决方案。
–《算法导论》
贪心算法在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。贪心算法能得到许多问题的整体最优解或整体最优解的近似解。因此,贪心算法在实际中得到大量的应用。

贪心需要注意的几个问题

(1)没有后悔药。 一旦做出选择,不可以返回。
(2)有可能得到的不是最优解,而是最优解的近似解。
(3)选择什么样的贪心策略,直接决定算法的好坏。

贪心算法需要遵循的原则

贪亦有道
所谓贪心选择性质是指原问题的整体最优解可以通过一系列局部最优的选择得到。应用同一规则,将原问题变为一个相似的但规模更小的子问题,而后的每一步都是当前最佳的选择。这种选择依赖于已经做出的选择,但不依赖于未做出的选择。运用贪心策略解决的问题在程序运行中无回溯的过程。
当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题是否可以用贪心算法解决的关键。

例题

最优装载问题

有一天,海盗们截获了一艘装满各种各样古董的货船,每一件古董都价值连城,一旦打碎就失去了它的价值。虽然海盗船足够大,但载重量为C,每件古董的重量为 wi,海盗们该如何把尽可能多数量的宝贝装上海盗船呢?
输入: 第一行, 载重量C及古董的个数N
第二行,每个古董的重量,用空格分隔
输出: 单独一行,最大可装载古董数

简单背包问题

假设山洞中有n种宝物,每种宝物有一定重量w和相应的价值v,毛驴的运载能力有限为,只能运走m重量的物品,一种宝物只能拿一件,宝物可以分割。那怎么才能使毛驴运走的价值最大呢?
在这里插入图片描述

会议安排问题

某跨国公司总裁正分身无术,为一大堆会议时间忙的焦头烂额,希望一个高级钟点秘书能做出合理的安排,能在有限时间内召开更多的会议(任意两个会议不能同时进行)。
在会议安排中,每一个会议i都有起始时间bi和结束时间ei,且bi<ei,即一个会议的进行时间为半开区间[bi,ei)。如果[bi,ei)与
[bj,ej)均在“有限的时间内”,且不相交,则称会议i和会议j是相容的。也就是说,当bi≥ej或bj≥ei时,会议i与j相容。会议安排问题要求在所给的会议集合中选出最大的相容活动子集,即尽可能的在有限时间内召开更多的会议。

课余时间也不要忘了有各种各样的活动呀。

现在玲玲学姐想给你们准备一个活动,但是她不知道你们什么时候有空,现在她要统计一下你们有事情的时间,在这些时间中间找到一个你们都空闲的最大的时间间隔。
现在一共有n个人,每个人会有在(x,y)时间段中是有事的。现在你需要帮着玲玲学姐在(0,m)时间段中找到那个最大的大家都有空的时间段的长度。输入:共n+1行

第1行:两个整数n,m第2到n+1行:每行两个整数xi,yi,表示第i个人在时间(xi,yi)有事情。输出:第1行:一个整数,表示最长的时间段的长度。

一道思考题

有N只蚂蚁以每秒1cm的速度在长为Lcm的竿子上爬行。当蚂蚁爬到竿子的端点时就会掉落。由于竿子太细,两只蚂蚁相遇时,它们不能交错通过,只能各自反向爬回去。对于每只蚂蚁,我们知道它距离杆子左端的距离Xi,但不知道它当前的朝向。请计算所有蚂蚁都从竿子上掉落所需的最短时间和最长时间。
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值