我目前正在制作一个供个人使用的简单脚本,它会列出我想要购买的所有物品以及价格比较器在线的每件物品的价格,并试图找到最便宜的方式购买所有这些物品(请记住,如果您从同一家商店购买多件商品,那么您只需支付一次运费)。实现这一目标的最简单方法是什么?
我考虑过使用匈牙利语算法,但意识到这可能不是最好的主意,因为从同一商店购买通常正是我们做想要的,而不是要避免的事情。另一方面,试图贪婪地找到手头物品最多的商店也不尽如人意,因为他们卖掉它们并不意味着他们以最优惠的价格出售它们,即使我们只支付一次运费。
你会推荐什么?是否有一些易于实现的解决方案?
答案 0 :(得分:1)
我认为这是一个难以解决的问题,因为如果你能够解决这个问题,你可以从https://en.wikipedia.org/wiki/Set_cover_problem中解决问题并设置成本,这样你问题的确切解决方案就可以解决问题。问题。可能在该文章或其他地方给出的一些近似解决方案会有所帮助。抛出高科技的最简单方法可能是找到一个整数线性编程包并使用它。
答案 1 :(得分:0)
这不是答案,而是对您的问题的澄清。由于它太长而不适合评论,我在这里发布。
设有M
个商店和N
个商品。提供了矩阵A
,其中A(i, j)
是从商店j
购买商品i
的价格(如果商店A(i, j)
,我们将i
设置为无穷大}不出售项目j
)。另外还有一个数组S
,其中S(i)
是商店i
的运费。
问题:找到功能b:{1,...,N} -> {1,...,M}
,意思是从商店j
购买商品b(j)
,这可以最大限度地降低总费用。
您已经可以看到这与匈牙利算法的设置不同,后者要求最小化{1,...,N}
的PERMUTATION。
此时,有几个关于输入性质的问题:
M
和N
的范围是多少?如果它们中的任何一个非常小(例如,<20),则可以接受指数算法。A
(即大多数商品只能在少数商店购买)或密集(即大部分商店都有大多数商品)?