编辑:对不起,我对问题的解释不清楚!这应该更好:
ONE Bundle 是交付给 ONE 平台(买方)的一包物品
谢谢!
最佳答案
这是一个有趣的小问题。我今天早上花了几个小时来解决这个问题,虽然我没有完整的解决方案,但我想我已经足够让你开始了(我相信这就是你所要求的)。
首先,我假设这些事情,根据你对问题的描述:
精确解——蛮力法
为此,首先要意识到的是,对于给定的一组买家,计算最大总收入是很直接的,因为您可以为每个项目选择该组买家提供的最高价格。将所有这些最高价格加起来,您就拥有了该组买家的最大总收入。
现在您所要做的就是为每个可能的买家组合进行计算。这是一个基本的组合问题:“n 选择 k”,其中 n 是买家总数,k 是您限制的买家数量。有一些函数可以生成这些组合的列表(我自己写的……还有用于 php 的 this PEAR package)。
一旦您对所选买家的每种组合都获得了最大总收入,只需选择最大的一个,您就解决了问题。
更优雅的算法?
然而,正如我通过称之为“蛮力”所暗示的那样,上面的速度并不快,而且扩展性很差。我的机器内存不足,有 20 个买家和 20 个项目。我确信存在更好的算法,而且我有一个很好的算法,但它并不完美。
它基于机会成本。我计算每件商品的最高价格和第二高价格之间的差额。这种差异是不选择具有最高价格的买家的机会成本。
然后我选择对机会成本最高的物品提供高价的买家(从而避免最坏的机会成本),直到我有 k - 1 个买家(其中 k 是我可以选择的最大值)。最终的选择很棘手,我没有编写更复杂的算法,而是为最终买家运行所有可能性并选择最佳收入。
这个策略大多数时候会选择最好的组合,如果它错过了,它也不会错过太多。它的扩展性也相对较好。它比小规模的蛮力快 10 倍,如果我将所有参数(买家、买家限制和物品)翻两番,计算时间会增加 20 倍。考虑到涉及多少组合,这很好。
我已经起草了一些代码,但这篇文章太长了。如果您有兴趣,请告诉我,我会想办法将其发送给您。
关于php - 通过向多个买家销售商品来查找最高总价,受用户输入限制,可以进行多少个单独的销售,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6853266/