Algorithm 有效分配游戏

Algorithm 有效分配游戏,algorithm,knapsack-problem,np,Algorithm,Knapsack Problem,Np,我想解决一个问题,如果有人能给我指出我可以学习实现的算法,我将不胜感激 问题是,作为一家商店,我们正在提供游戏捆绑包。一个包可以有多个游戏,即 B1={G1,G2,G3},B2={G2,G4,G5},B3={G1,G5},B4={G2}等 没有硬编码的捆绑包,我们可以根据市场上任何给定的游戏创建任何新的捆绑包。零售商只能从我们这里购买捆绑包,不能购买单个游戏。但是,他们会告诉我们他们的偏好,即零售商可能会问我们他想要一个包含游戏G5和G4的捆绑包。看看这个例子,我应该把B2包还给他,但如果他说他

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

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

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

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

此外,我们还可以计算剩下多少捆。现在这不是问题所在,我想为给定的请求寻找最合适的捆绑包。一个捆绑包也可以包含像B4这样的单个游戏


我试着用谷歌搜索一些算法,但我不认为这对我有帮助

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

然后,当用户请求G1和G2时,您可以在查找索引中对每个游戏的结果使用集合和操作。如果没有包含所有输入游戏的bundle,您必须从中定义自己的业务逻辑(返回包含最多游戏的bundle?最便宜的bundle?返回单独包含每个游戏的小bundle?-算法取决于您想要完成的任务)


您只需确保无论何时编辑bundle,都会相应地更新索引。(即,无论何时:bundle.put(bundle,game),您也应该进行games.put(game,bundle)和removals。bundle和games的大致数量会有所帮助。例如,如果您有一个零售商请求3个游戏,您可以为零售商搜索1个、2个,最后是3个bundle。这将创建许多“组合”这一点我必须在最后计算出来。假设我们有10个捆绑包,每个捆绑包只有两个相同的游戏。一个零售商要求10个不同的游戏,所以我很可能会有5个不同的捆绑包,其中包含这些游戏。现在我们必须对每个组合进行交叉,以确定捆绑包的最小数量。考虑它。@EmAe如果这是您想要的,那么我建议您按照我的方式定期计算它,但将所有可能的结果存储在一个查找映射中(例如G1G2=B1)。您请求的基本上是一个搜索引擎,因此您需要一个索引生成器和一个查询引擎。