如何从众多产品中找到最便宜的组合

时间:2015-07-24 11:04:42

标签: algorithm np-hard

我获得了某张桌子

商店

[A][B][C]

产品

[P1][P2][P3][P4]

他们的价格如下所示

[  ][A][B][C]
[P1][6][4][2]
[P2][3][5][7]
[P3][1][9][9]
[P4][8][4][9]

假设用户想要尽可能便宜地购买2家商店中的所有商品,那么只有高效算法吗?

这是旅行购买者的问题吗?

3 个答案:

答案 0 :(得分:4)

假设:

  

用户希望购买2家商店的所有商品

算法草图:
使用二维查找表,将商店作为列和行。

[x][A]  [B]  [C]  
[A][inf][]   []  
[B][]   [inf][]  
[C][]   []   [inf]

对角线初始化为无穷大,因为您需要选择两个不同的商店 现在填充查找表的右上角三角形或左下角三角形。

e.g。在位置[A],[B],您选择了商店A和商店B.因此,只能从这两家商店购买产品,这意味着您可以采取贪婪的方式(拿更便宜的商品)。最后将价格总和存储在查找表中 具有最低值的条目是您的问题的解决方案。 此外,您需要检查一家商店的每件商品比另一家商店便宜的情况,因此在本草图中,所有商品都将在一家商店购买。

算法的复杂性应该是O(n²m),其中n是存储的数量,m是产品的数量。

答案 1 :(得分:0)

我觉得可以只使用排除。在每个步骤中,您删除一个最无效的商店。这使得polynomail中的解决方案在O(N³)时间复杂度最差。

答案 2 :(得分:0)

您可以再添加三列。

一分钟(A,B)

一分钟(A,C)

一分钟(B,C)

计算这三个新列的总和。如果最低总和是列min(A,C),则转到商店A和C.

该算法在复杂性方面非常有效。