背包问题——贪婪算法

贪婪算法

在时间或空间有限的条件下,去较为快速的找到问题的近似解。典型的旅行商问题,就是一个复杂度为O(n!)的问题,可能解的数量会随着路线的增多呈爆炸性增长。

背包的例子

假设你是一个小偷,有一个可装35Kg重东西的背包,要去商场获取收益。因此要尽量保持包里装的东西价值最大。那么你应该如何去偷呢?

背包问题——贪婪算法_第1张图片

使用贪婪方法步骤:

  1. 就直接去找价值最大,而且装得下的商品,
  2. 就这么一直放,直到包里放不下了。

什么?!这就完事了?对,贪婪算法就是这么简单粗暴。虽然找到的不一定是最优解,但也足够接近,而且速度也足够快!

 

另一个例子

在一个周六的晚上,你参加了一个盛大的晚会。由于感到局促不安,你想知道这一大厅中是否有你已经认识的人。你的主人向你提议说,你一定认识那位正在甜点盘附近角落的女士罗丝。不费一秒钟,你就能向那里扫视,并且发现你的主人是正确的。然而,如果没有这样的暗示,你就必须环顾整个大厅,一个个地审视每一个人,看是否有你认识的人。

 

小结

若问题集的规模很小,用任何算法都合适。一旦问题规模复杂度增加,解决一个问题的时间就趁爆炸性增长。因此需要更深入的去探究问题中的规律和本质,找到更优的解决方法。

以有涯解决无涯问题,殆矣。

 

以下图片来自《算法图解》8.3节

背包问题——贪婪算法_第2张图片

你可能感兴趣的:(代码精进之路)