《图解算法》:贪心算法

教室调度

你希望将尽可能多的课程安排在某间教室上
在这里插入图片描述

(1) 选出结束最早的课,它就是要在这间教室上的第一堂课。
(2) 接下来,必须选择第一堂课结束后才开始的课。同样,你选择结束最早的课,这将是要在这间教室上的第二堂课。
重复这样做就能找出答案!
在这里插入图片描述

贪心算法:近似解

一丶背包问题

假设你是个贪婪的小偷,背着可装35磅(1磅≈0.45千克)重东西的背
包,在商场伺机盗窃各种可装入背包的商品。你力图往背包中装入价值最高的商品,你会使用哪种算法呢?
在这里插入图片描述
采取贪婪策略:盗窃可装入背包的最贵商品在这里插入图片描述
你偷到了价值3000美元的东西。且慢!如果不是偷音响,而是偷笔记本电脑和吉他,总价将为3500美元!
在这里插入图片描述

在这里,贪婪策略显然不能获得最优解,但非常接近。有时候,你只需找到一个能够大致解决问题的算法,此时贪婪算法正好可派上用场,因为它们实现起来很容易,得到的结果又与正确结果相当接近。

下面类似于背包问题

  1. 你在一家家具公司工作,需要将家具发往全国各地,为此你需要将箱子装上卡车。每个箱子的尺寸各不相同,你需要尽可能利用每辆卡车的空间,为此你将如何选择要装上卡车的箱子呢?请设计一种贪婪算法。使用这种算法能得到最优解吗?

一种贪婪策略是,选择可装入卡车剩余空间内的最大箱子,并重复这个过程,直到不能再装入箱子为止。使用这种算法不能得到最优解。

  1. 你要去欧洲旅行,总行程为7天。对于每个旅游胜地,你都给它分配一个价值——表 示你有多想去那里看看,并估算出需要多长时间。
    你如何将这次旅行的价值最大化?请设计一种贪婪算法。使用这种算法
    能得到最优解吗?

不断地挑选可在余下的时间内完成的价值最大的活动,直到余下的时间不够完成任何活动为止。使用这种算法不能得到最优解。

二丶集合覆盖问题

① 广播节目

假设你办了个广播节目,要让8个州的听众都收听得到。为此,你
需要决定在哪些广播台播出。在每个广播台播出都需要支付费用,因此
如何找出覆盖全美50个州的最小广播台集合呢?听起来很容易,但其实
非常难
在这里插入图片描述

方案一:

(1) 列出每个可能的广播台集合,这被称为幂集 (power set)。可能的子集有2n
(2) 在这些集合中,选出覆盖全美50个州的最小集合。

方案二:

(1) 选出这样一个广播台,即它覆盖了最多的未覆盖州。即便这个广播台覆盖了一些已覆盖的州,也没有关系。
(2) 重复第一步,直到覆盖了所有的州。

② 选球员

Jonah正为其虚构的橄榄球队挑选队员。他有一个候选球员名单,其中每个球员都满足某些要求,Jonah需要组建一个满足所有这些要求(优秀的四分卫,优秀的跑卫,擅长雨中作战,以及能承受压力等)的球队,可名额有限
在这里插入图片描述
Jonah突然间意识到,这不就是一个集合覆盖问题吗!
(1) 找出符合最多要求的球员。
(2) 不断重复这个过程,直到球队满足要求(或球队名额已满)。

三丶旅行商问题

上面广播节目假如需要精确计算出来,你n个广播台必须计算每个可能2n个集合
给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。
在这里插入图片描述
n个城市:n!条路线

旅行商问题和集合覆盖问题有一些共同之处:你需要计算所有的解,并
从中选出最小/最短的那个。这两个问题都属于NP完全问题。

识别NP完全问题
没办法判断问题是不是NP完全问题,但还是有一些蛛丝马迹可循的

  • 不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP完全问题。
  • 如果问题涉及集合(如集合覆盖问题)且难以解决,它可能就是NP完全问题。
  • 如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题。

下面三个全是NP完全问题

  1. 有个邮递员负责给20个家庭送信,需要找出经过这20个家庭的最短路径
  2. 在一堆人中找出最大的朋友圈(即其中任何两个人都相识)
  3. 你要制作美国地图,需要用不同的颜色标出相邻的州。为此,你需要确定最少需要使用多少种颜色,才能确保任何两个相邻州的颜色都不同
发布了124 篇原创文章 · 获赞 92 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_42146775/article/details/104070187