[英]How to find the cheapest combinations from a number of products
给我一张桌子
专卖店
[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家商店中购买所有商品,那么是否只有高效的算法可以做到?
这是旅行购买者问题吗?
假如说:
用户想在2家商店中购买所有商品
算法草图:
使用二维查询表,其中存储为列和行。
[x][A] [B] [C]
[A][inf][] []
[B][] [inf][]
[C][] [] [inf]
对角线初始化为无穷大,因为您需要选择两个不同的存储。
现在,填充查找表的右上三角形或左下三角形。
例如,在位置[A],[B]中,您选择了商店A和商店B。因此,只能从这两个商店中购买产品,这意味着您可以采取贪婪的方法(以便宜的一种为准)。 最后,将价格总和存储在查找表中。
数值最小的条目是解决您的问题的方法。 此外,您需要检查一个商店的每种产品都比另一商店便宜的情况,因此在此草图中,所有产品都将在一个商店中购买。
算法的复杂度应为O(n²m),其中n是商店数量,m是产品数量。
我觉得只能使用排除功能。 在每次装订时,您都会删除一个效率最低的存储。 这使Polynomail解决方案的O(N³)时间复杂度最差。
您可以再添加三列。
一分钟(A,B)
一分钟(A,C)
一分钟(B,C)
计算这三列的总和。 如果最低的总和是列min(A,C),则转到存储区A和C。
就复杂性而言,该算法将非常有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.