【问题标题】:Determining the cheapest way to buy n products online确定在线购买 n 产品的最便宜方式
【发布时间】:2016-07-24 21:22:33
【问题描述】:

我目前正在编写一个供个人使用的简单脚本,该脚本将列出我想购买的所有物品的清单以及来自在线价格比较器的每件物品的价格,并尝试找到购买所有物品的最便宜方式(请记住,如果您从同一家商店购买多件商品,您只需支付一次运费)。实现这一目标的最简单方法是什么?

我曾想过为此使用匈牙利算法,但意识到这可能不是最好的主意,因为从同一家商店购买往往正是我们确实想要的,而不是要避免的。另一方面,试图贪婪地找到手头最多的商店也是失败的,因为他们确实出售它们并不意味着他们以最优惠的价格出售它们,即使我们只支付一次运费。

你会推荐什么?是否有一些易于实施的解决方案?

【问题讨论】:

  • 首先想到的是从一个可行的解决方案开始,最大限度地减少不同商店的数量(即从一个商店购买尽可能多的产品),然后为每个产品查看是否从另一家商店购买它降低总额(这意味着价格差异应抵消增加的运费,除非您已经将商品分配给该商店)。

标签: algorithm computer-science


【解决方案1】:

我认为这是一个很难准确解决的问题,因为如果你能准确解决这个问题,你可以从https://en.wikipedia.org/wiki/Set_cover_problem 获取问题并设置成本,以便你的问题的确切解决方案将解决集合覆盖问题。可能在那篇文章或其他地方给出的一些近似解决方案会有所帮助。使用高科技的最简单方法可能是找到一个整数线性编程包并使用它。

【讨论】:

    【解决方案2】:

    这不是答案,而是对您的问题的澄清。由于篇幅太长,无法发表评论,我将其发布在这里。

    让有M 商店和N 物品。给出了一个矩阵A,其中A(i, j) 是从商店i 购买商品j 的价格(如果商店i 不出售商品j,我们将A(i, j) 设置为无穷大)。还给出了一个数组S,其中S(i) 是店铺i 的运费。

    问题:找到函数b:{1,...,N} -> {1,...,M},意思是从b(j)商店购买物品j,这样可以最大限度地降低总成本。

    您已经可以看到这与匈牙利算法的设置不同,后者要求最小化排列为{1,...,N}

    此时,关于输入的性质有几个问题:

    • MN 的范围是多少?如果它们中的任何一个都非常小(例如
    • 矩阵A 是稀疏(即大多数商品只能在少数商店购买)还是密集(即大多数商品在大多数商店都有售)?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多