算法:淘汰不再有机会赢得比赛的玩家

Posted

技术标签:

【中文标题】算法:淘汰不再有机会赢得比赛的玩家【英文标题】:Algorithm: Eliminating players that no longer have a chance to win the tournament 【发布时间】:2021-04-02 07:16:45 【问题描述】:

我一直在研究这个问题的算法,但无法弄清楚。问题如下:

在与 X 球员的比赛中,每个球员都在赌 NBA 篮球比赛的结果。

猜对比赛结果的玩家得 3 分,猜对比赛的 MVP 得 1 分,猜错的都得 0 分。

该算法需要能够确定某个玩家是否无法达到该投注游戏的第一名。

例如,假设联盟总共有 30 场比赛,那么玩家猜对的最高分是 (3+1)*30=120。

在下表中,您可以看到玩家 X、Y 和 Z。 玩家 X 到目前为止猜对了 20 场比赛,所以他有 80 分。 玩家 Y 和 Z 分别得到 26 和 15 分,由于只剩下 10 场比赛,即使他们猜对了剩下的 10 场比赛,也不足以到达第一名。 因此,算法确定他们被淘汰出局。

Team Points Points per match Total Games Max Points possible Games left Points Available Eliminated?
X 80 0-L 1-MVP 3-W 30 120 10 0-40 N
Y 26 0-L 1-MVP 3-W 30 120 10 0-40 Y
Z 15 0-L 1-MVP 3-W 30 120 10 0-40 Y

The baseball elimination 问题似乎和这个问题最相似,但又不完全一样。

我应该如何构建最大流量问题的约简来适应这个问题?

谢谢。

【问题讨论】:

输入是什么?球员是否会提前下注本赛季的所有比赛?我们知道他们的赌注吗? 球员在每场比赛前下注,我们知道他们的赌注是的。 我们只知道下一场比赛的投注吗?或者我们是否知道下一场比赛的赌注,一场接一场,等等? 【参考方案1】:

我不明白您为什么要研究非常复杂的最大流量算法。对于非常复杂的事情可能需要这些(尤其是当配对导致 zero-sum 结果并且顺序/剩余配对开始变得重要时 -> !更难进行最坏情况分析)。

也许您提到的棒球问题就是其中之一(没有检查)。但是您的用例听起来微不足道

1. Get current leader score LS
2. Get remaining matches N
3. For each player P
  4. Get current player score PS
  5. Eliminate iff PS + 3 * N < LS

(assumes parallel progress: standings always synced to all players P have played M games
 -> easy to generalize though)

这很简单。鉴于您的描述,没有什么能阻止我们从其他玩家那里得出最坏情况的表现,也就是每个其他玩家对所有即将发生的猜测都猜错的有效场景->玩家 P 的分数 S 可以保持在S 代表所有剩余的游戏。

当存在更复杂的侧面约束(例如统计分布/期望)时,事情可能会迅速转变为 NP 难决策问题

【讨论】:

以上是关于算法:淘汰不再有机会赢得比赛的玩家的主要内容,如果未能解决你的问题,请参考以下文章

确定第一个玩家是否可以赢得比赛

数据结构与算法之深入解析“石子游戏IV”的求解思路与算法示例

数据结构与算法之深入解析“石子游戏IV”的求解思路与算法示例

测试肯定胜利的算法

从前一组阶段生成单场淘汰赛的算法

体育竞技模拟比赛