算法——如何识别NP问题

解决集合覆盖问题,必须计算每个可能的集合

比如求到五个不同城市所经最短路径,就可能需要计算每条可能的路径。

问题一:前往五个城市,有几条可能的路径呢?如果只有两个城市,那么就往返两条路径。两条路径也是不同的其实,可能去的路上有很多单行线等等。

问题二:有时候不能确定从哪个城市出发,快递将包裹从芝加哥发往湾区,包裹将通过航运发送到联邦快递在湾区的50个集散点之一,再装上经过不同配送点的卡车。该通过航运发送到哪个集散点呢?起点未知,需要通过计算找出起点和最佳路线。

当三个城市时:

 而四个城市时:

 四个城市,选好一个城市,剩下三个城市就有六种选择,所以总共4 * 6 种

近似求解:随便找一个城市,选择下一个城市都选择最近的还没去的城市。这就是一个近似求解。

如何识别NP问题?

比如说为橄榄球队挑选队员。列了一张清单,要满足多项要求。Jonah需要组建一个满足所有这些要求,这就是一个集合覆盖问题。

①找出符合最多要求的球员 ②不断重复,知道球队满足要求(或球队名额已满)

NP问题无处不在,找出NP问题这样就不用苛求完美的解决方案,但判别很难,易于解决的问题和NP完全问题差别很小。

之前有找出A到B最短路径,但要找出经由指定几个点的最短路径就是NP完全问题了

NP完全问题的一些蛛丝马迹:

①元素较少时算法的运行速度非常快,但随着元素数量的增加,速度骤减。

②涉及“所有组合”的问题通常是NP完全问题

③不能把问题分成小问题,必须考虑各种可能的情况,这就是NP完全问题

④如果问题涉及集合(比如广播台集合)并且难以解决时,也可能是

⑤如果问题可以转换为集合覆盖问题或旅行商问题,肯定是NP完全问题

猜你喜欢

转载自www.cnblogs.com/zhangshengchao/p/12824730.html