返回可以使用特定金额购买的唯一商品

时间:2017-05-07 13:03:09

标签: python algorithm list greedy

我们按特定顺序排序的项目很少...... 所有项目都有相关价格p(p1,p2 ... pn)说

item1 - p1

第2项 - 第2页

。 。

itemn - pn

我们有x金额购买物品。并且最初为0< x< = p

每次迭代后x将变为x-p1,x-(p1 + p2).... x-(p1 + p2 + ... pn)....如果我们发现任何具有价格的itemK pk> x的当前值我们将从列表中删除该项目并购买下一个项目

我们将再次运行此操作,直到x = 0(金额耗尽)或列表为空(所有项目的值为> x的当前值并从列表中删除)

函数将返回no。每件商品的购买量

现在我可以想到一个基于python dict / list的方法来实现这一点,我们将在上面的场景中循环,执行一个.remove(item)。

但它的迭代太多了。想知道是否有更好的数学方法来有效地找到它。

1 个答案:

答案 0 :(得分:1)

这是你能做的最好的事情。 (你提到的方式)。它只需要一次通过。没有这样的数学方法。

对于您的方法 - O(n) 1次传递。

检查你的问题...这是一种模拟问题。这是你想要的吗? * 即可。您从未提及是否要最大化购买的商品。

但是如果你想最大化项目数量,那么它就是一个不同的问题......然后你必须阅读0-1 knapscak prblem