我获得了某张桌子
商店
[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家商店中的所有商品,那么只有高效算法吗?
这是旅行购买者的问题吗?
答案 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.
该算法在复杂性方面非常有效。