【问题标题】:How to find the cheapest combinations from a number of products如何从多种产品中找到最便宜的组合
【发布时间】:2015-07-24 11:04:41
【问题描述】:

给了我一张桌子

商店

[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 家商店的所有东西,是否只有有效的算法?

这是旅行购买者问题吗?

【问题讨论】:

    标签: algorithm np-hard


    【解决方案1】:

    假设:

    用户想购买 2 家商店的所有东西

    算法草图:
    使用以存储为列和行的二维查找表。

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

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

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

    算法的复杂度应该是 O(n²m),其中 n 是商店的数量,m 是产品的数量。

    【讨论】:

    • 是否有可能有一个 O(nm) 的解决方案,因为预计商店的数量会很大?
    【解决方案2】:

    我感觉只能使用排除。在每一步,您都会删除一个效率最低的商店。这使得多项式邮件的解决方案在最坏的 O(N³) 时间复杂度下。

    【讨论】:

      【解决方案3】:

      您可以再添加三列。

      1 代表 min(A,B)

      1 代表 min(A,C)

      1 为 min(B,C)

      计算这三列的总和。如果最小和是列 min(A,C),则转到存储 A 和 C。

      这种算法在复杂性方面会非常有效。

      【讨论】:

        猜你喜欢
        • 2015-01-22
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-28
        相关资源
        最近更新 更多