找到具有最高总和的第n个组合

时间:2018-05-13 10:33:45

标签: algorithm

我有一个玩家列表,每个玩家都有薪水和等级(两个整数值)。

我必须找到第6个最大的6名玩家组合(他们的评级总和最大),并且他们的工资总和必须小于或等于50000。

例如,如果我有1,2,...,m的玩家列表,我目前正在做的是:

  1. 生成所有可能的6个玩家组合(m选择6)。
  2. 过滤出工资总额> 1的组合。 50000
  3. 按降序排序剩余组合,按评分总和排序
  4. 从排序列表中选择第n个。
  5. 这显然是一种蛮力方法,适用于少数玩家。但目前我有140名玩家,产生了超过90亿的组合,并且需要花费太多才能完成。

    有关如何更快地完成此操作的任何建议吗?

1 个答案:

答案 0 :(得分:0)

以下是避免获得所有组合的方法。

  • 准备降序排序地图,其中排名为关键,薪水为值

这将使您的排名按降序排序,并且地图中的第一个键将是最高排名。如果您有多个具有相同排名的记录,请考虑将它们列为相同排名的列表。

  • 选择前6名排名并检查他们的总薪水是否<= 50000,你得到你的结果,否则转到下一个6组合。

如果您对排名有多个记录,请尝试添加他们的工资。

这需要一些耐心和一些好的测试才能转化为程序,但肯定会是最佳解决方案。