如何从大量产品中找到最便宜的组合
How to find the cheapest combinations from a number of products
我被赋予了某种table
店铺
[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 家商店的所有东西,是否只有高效的算法才能做到这一点?
这是旅行购买者问题吗?
我觉得可以只使用排除。在每一步中,您都会删除一个效率最低的商店。这使得多项式的解决方案最差 O(N³) 时间复杂度。
假设:
user want to buy all of the things in 2 stores
算法示意图:
使用二维查找 tables,将商店作为列和行。
[x][A] [B] [C]
[A][inf][] []
[B][] [inf][]
[C][] [] [inf]
由于您需要 select 两个 不同的 商店,因此对角线初始化为无穷大。
现在填充查找的右上三角或左下三角table.
例如在位置 [A],[B] 你已经 select 了 A 店和 B 店。因此只能从这两家店购买产品,这意味着你可以做一个贪心的方法(取便宜的那个).最后将价格总和存储在查找 table.
中
具有最低值的条目是您问题的解决方案。
此外,您需要检查一家商店的每种产品都比另一家便宜的情况,因此在此草图中,所有产品都将在一家商店购买。
算法的复杂度应该是 O(n²m),其中 n 是商店的数量,m 是产品的数量。
您可以再添加三列。
一个为 min(A,B)
最少一个(A,C)
最少一个(B,C)
计算这三列的总和。如果最低总和是列 min(A,C),则转到商店 A 和 C。
这个算法在复杂度方面会非常有效。
我被赋予了某种table
店铺
[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 家商店的所有东西,是否只有高效的算法才能做到这一点?
这是旅行购买者问题吗?
我觉得可以只使用排除。在每一步中,您都会删除一个效率最低的商店。这使得多项式的解决方案最差 O(N³) 时间复杂度。
假设:
user want to buy all of the things in 2 stores
算法示意图:
使用二维查找 tables,将商店作为列和行。
[x][A] [B] [C]
[A][inf][] []
[B][] [inf][]
[C][] [] [inf]
由于您需要 select 两个 不同的 商店,因此对角线初始化为无穷大。
现在填充查找的右上三角或左下三角table.
例如在位置 [A],[B] 你已经 select 了 A 店和 B 店。因此只能从这两家店购买产品,这意味着你可以做一个贪心的方法(取便宜的那个).最后将价格总和存储在查找 table.
中
具有最低值的条目是您问题的解决方案。
此外,您需要检查一家商店的每种产品都比另一家便宜的情况,因此在此草图中,所有产品都将在一家商店购买。
算法的复杂度应该是 O(n²m),其中 n 是商店的数量,m 是产品的数量。
您可以再添加三列。
一个为 min(A,B)
最少一个(A,C)
最少一个(B,C)
计算这三列的总和。如果最低总和是列 min(A,C),则转到商店 A 和 C。
这个算法在复杂度方面会非常有效。