【发布时间】:2013-07-12 08:45:51
【问题描述】:
我将创建一个我想购买的产品列表。假设他们都被赋予了一个唯一的参考代码。我有一个供应商列表,我可以从这些供应商处购买,并且为方便起见,每个供应商对每种产品都使用相同的参考代码。
一些供应商收取运费。其他人仅在您花费少于一定金额时才收取运费。如果您多次购买某些产品,一些供应商会打折,但可能会有限制(例如 1 送 1)。
获取我想购买的产品清单并计算从每个供应商处购买所有产品的总成本非常容易。我想做的是创建一个脚本来确定拆分订单是否更好。
例如:
零售商 A 收费:
产品 A - 5 英镑
产品 B - 10 英镑
产品 C - £10
产品 D - 10 英镑
运费 - 5 英镑
零售商 B 收费:
产品 A - 5 英镑
产品 B - 12 英镑
产品 C - £12
产品 D - 30 英镑
运费 - 5 英镑 - 如果消费 20 英镑或更多,则免费
在这种情况下,如果我只想购买产品 C,最便宜的将来自零售商 A。
如果我想购买:
1x 产品 A
2x 产品 B
1x 产品 D
最便宜的将是零售商 B(因为免费送货)产品 A 和 B,然后拆分订单并从零售商 A 购买产品 D(因为即使包含送货,价格也会显着降低)。
所以在我看来,这不是一项复杂的任务,而且我可以很容易地在纸上解决它。问题是,我如何将其转换为代码。我不是在寻找代码来实现它 - 只是关于如何实现它的理论的一些指导。
【问题讨论】:
-
蛮力:生成所有可能的组合,确定每个组合的成本并选择最便宜的组合。
-
我觉得这个问题是NP...我错了吗?
-
@Calpis 你的意思可能是NP-complete,有区别。
-
(大约)您希望购买多少产品以及(大约)有多少供应商?这将使您了解您是否需要比蛮力更快地做某事。
-
更具体地说,算法非常、非常、非常慢。蛮力将花费 50^10(每个供应商的每个产品),现代计算机可能会遇到一些困难。当然还有approximation algorithms,它运行得更快,但没有给出最佳解决方案。
标签: algorithm