可能在锦标赛中获胜的算法

时间:2016-06-15 18:56:47

标签: algorithm graph-algorithm tournament

我准备考试了,我遇到了这个问题:

  

我们有 n 团队互相玩耍两次。每场比赛都没有抽签结束。获胜最多的团队被宣布为胜利者(可以不止一个)。设计一种算法,给出一些游戏的初始结果,检查某个团队是否仍有机会成为本次锦标赛的赢家。

我不知道如何接近。这个问题被归入类别"流量和匹配",但我不知道这可能是一个最大流量问题。

1 个答案:

答案 0 :(得分:4)

假设我们希望A队获胜。

显然,如果A赢得所有比赛是最好的,所以这给了我们一个目标分数。我们现在可以计算每个其他球队必须承受的损失数量,以便A赢得整体胜利。

问题是我们每场剩下的比赛最多只能获得1个输家。因此,我们需要弄清楚如何将球队与比赛相匹配,其中每场比赛对应于特定比赛中失去的特定球队。

这基本上匹配团队和游戏之间的二分图,但我们也可以通过额外的源和汇点节点以最大流量解决它。

  1. 为每个团队建立一个源节点,其容量等于团队必须拥有的损失数量。
  2. 从每个团队中获得优势,让每个剩余的游戏参与该团队(具有无限容量)
  3. 从剩余的每个游戏到汇聚节点的边缘,其容量等于游戏的播放次数。 (即如果B和C比赛仍在进行,则容量为2)
  4. 然后,如果你可以构建一个从源到接收器达到容量的有效流(在每个源到团队边缘),你已经证明团队A仍有可能获胜。