有效地分配游戏

时间:2015-06-16 01:35:53

标签: algorithm knapsack-problem np

我希望解决一个问题,如果有人能指出我可以学习实施的算法,我将不胜感激。

问题是我们作为商店提供游戏捆绑。一个包可以有多个游戏,即

B1 = {G1,G2,G3},B2 = {G2,G4,G5},B3 = {G1,G5},B4 = {G2}等。

没有硬编码捆绑包,我们可以根据我们在市场上的任何特定游戏创建任何新捆绑包。零售商只能购买我们的捆绑产品,而不能购买个别游戏,但他们会告诉我们他们的偏好,即零售商可能会问我们他想要一个拥有游戏G5和G4的捆绑包。看看这个例子,我应该把他归还给Bundle B2,但是如果他说他想要一个包含游戏G1和G4的捆绑,那么我必须给他返回B3和B2捆绑。

此外,我们还会计算剩余的捆绑数量。现在这不是问题,我想为给定的请求寻找最合适的捆绑包。捆绑也可以包括像B4这样的单独游戏。

我尝试使用谷歌搜索一些assignment算法,但我不这么认为它可以帮助我。

1 个答案:

答案 0 :(得分:0)

我会创建一个反向查找地图/游戏索引:bundle 例如。 G1 = {B1,B3},G2 = {B1,B2,B4}。

然后,当用户请求G1和G2时,您可以对查找索引中每个游戏的结果使用SET AND操作。在没有包含所有输入游戏的包的情况下,您必须从那里定义自己的业务逻辑(返回包含大多数游戏的包?最便宜的包?返回分别包含每个游戏的小包? - 算法取决于关于你想要完成的事情)

您只需要确保无论何时编辑捆绑包,都要相应地更新索引。 (即每当你这样做:bundles.put(捆绑,游戏)时,你也应该做game.put(游戏,捆绑)并对删除做同样的事情。