【问题标题】:Select products to get maximum cart value选择产品以获得最大的购物车价值
【发布时间】:2015-12-13 17:24:08
【问题描述】:

鉴于商店中可用的产品列表,我需要将一组产品选择到我的购物车中,这样我的购物车价值应该是最大的。 限制就像,购物车的尺寸为l*w*h。选择的产品应单独且完全适合购物车,从而为购物车带来最大可能的价值。每个产品可以选择一个 1 项目。

我每个产品都有product idpricelwhtweight。这怎么可能实现???

我想出了一个逻辑如下。

  1. 计算购物车的体积
  2. 使用价格计算每立方厘米的产品体积和产品价值
  3. 根据 value/cucm 对产品列表进行排序
  4. 开始从排序列表中添加产品,例如 1st、2nd、3rd 等,直到购物车装满为止。
  5. 如果某个产品无法放入购物车,请跳过它并从排序列表中选择下一个可能的产品。
  6. 获取列表后,检查所选列表中的任何产品是否可以替换为体积较小但购物车价值更高的其他产品。

但这并没有让我获得具有最大购物车价值的正确产品列表。上述逻辑有什么问题?

【问题讨论】:

  • 这听起来像是一个背包问题,您可以使用动态编程技术解决这个问题:en.wikipedia.org/wiki/Knapsack_problem。请记住,背包问题是 NP 完全问题,因此对于大型产品列表,该算法将需要很长时间。
  • 您的逻辑问题在于,“我是否应该将此产品放入购物车”的决定不一定取决于价值/成本比,还取决于其他因素,例如“是否有替代产品 A 和如果我将它们放入购物车而不是产品 C,则 B 具有更高(综合)价值/成本比。

标签: algorithm oop logic


【解决方案1】:

三个维度的整数值是否具有某种有限界限?然后可以用动态规划来解决。但我认为应该做出一些假设,例如子问题的划分应该是端到端的切割平面等。没有那个动态规划是不可行的。

这里的关键技巧是你需要考虑一个盒子可以以多种方式定向的可能性,它是沿着购物车的三个轴对齐它自己的三个维度的方式的数量。是3! = 6 对于三个维度。因此,在处理第 i 个产品的动态规划中,包括所有 6 种方式,将其 3 维解释为 L、W、H。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2016-04-04
    • 1970-01-01
    • 2017-01-03
    • 2017-08-07
    相关资源
    最近更新 更多