【问题标题】:Finding n-th combination with highest sum找到总和最高的第 n 个组合
【发布时间】:2018-05-13 10:33:44
【问题描述】:

我有一个球员名单,每个球员都有薪水和评分(都是整数值)。

我必须找到 6 名球员的第 n 大组合(就他们的评分总和而言最大),并限制他们的薪水总和必须小于或等于 50000。

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

  1. 生成所有可能的 6 个玩家组合(m 选择 6)。
  2. 过滤掉工资总和> 50000的组合
  3. 按评分总和降序排列剩余组合
  4. 从排序列表中选择第 n 个。

这显然是一种蛮力方法,适用于少数玩家。但目前我有 140 名玩家,产生了超过 90 亿种组合,完成的时间太长了。

关于如何更快地做到这一点的任何建议?

【问题讨论】:

  • 听起来像是一个固定数量物品的 0/1 背包问题

标签: algorithm


【解决方案1】:

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

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

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

  • 选择前 6 名,检查他们的总工资是否

在这里,如果您对某个级别有多个记录,请尝试添加他们的薪水。

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

【讨论】:

  • 我不认为这是正确的。关键部分是“其他移动到下一个 6 组合”——下一个 6 组合是什么?
猜你喜欢
  • 2019-05-04
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多