繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM