算法之集合覆盖问题
2018-07-16 本文已影响0人
非问
假设你办了个广播节目,要让全美50个州的听众都收听得到。为此,你需要决定在哪些广播台播出。在每个广播台播出都需要支付费用,因此你力图在尽可能少的广播台播出。
听起来很容易,但其实非常难。具体方法如下。
(1) 列出每个可能的广播台集合,这被称为幂集 (power set)。可能的子集有2 n 个。
(2) 在这些集合中,选出覆盖全美50个州的最小集合。
无法求出最优解
近似算法,贪婪算法可化解危机!使用下面的贪婪算法可得到非常接近的解。
NP完全问题
为解决集合覆盖问题,你必须计算每个可能的集合。
你需要计算所有的解,并从中选出最小/最短的那个
如何识别NP完全问题
元素较少时算法的运行速度非常快,但随着元素数量的增加,速度会变得非常慢。涉及“所有组合”的问题通常是NP完全问题。
不能将问题分成小问题,必须考虑各种可能的情况。这可能是NP完全问题。如果问题涉及序列(如旅行商问题中的城市序列)且难以解决,它可能就是NP完全问题。
如果问题涉及集合(如广播台集合)且难以解决,它可能就是NP完全问题。
如果问题可转换为集合覆盖问题或旅行商问题,那它肯定是NP完全问题。