甚至重复游戏以达到每位参与者的最大金额

时间:2014-11-02 21:31:47

标签: algorithm sorting computation round-robin tournament

我参加了一场循环赛,我为8支球队创造了所有必要的比赛(每位参赛者7场比赛)。然而,我需要每个参与者10场比赛,这意味着我需要复制比赛,并且除此之外,1和5不能互相比赛。您可以从下面的数据中看到我为每个参与者(游戏数量)按照创建的顺序生成的游戏。

我试图找出最好的方法来复制比赛并最终分配比赛,使得没有比赛重复三次并且仍然保留每个参赛者10场比赛并且1和5不参加比赛彼此。任何建议将有助于如何解决这个问题。这也需要是一个通用的解决方案,其他可能性仍然有效。

1 (6)
    1 vs 2
    1 vs 3
    1 vs 4
    1 vs 6
    1 vs 7
    1 vs 8
2 (7)
    1 vs 2
    2 vs 4
    2 vs 3
    2 vs 6
    2 vs 5
    2 vs 8
    2 vs 7
3 (7)
    3 vs 4
    1 vs 3
    2 vs 3
    3 vs 7
    3 vs 8
    3 vs 5
    3 vs 6
4 (7)
    3 vs 4
    2 vs 4
    1 vs 4
    4 vs 8
    4 vs 7
    4 vs 6
    4 vs 5
5 (6)
    5 vs 6
    5 vs 7
    5 vs 8
    2 vs 5
    3 vs 5
    4 vs 5
6 (7)
    5 vs 6
    6 vs 8
    6 vs 7
    2 vs 6
    1 vs 6
    4 vs 6
    3 vs 6
7 (7)
    7 vs 8
    5 vs 7
    6 vs 7
    3 vs 7
    4 vs 7
    1 vs 7
    2 vs 7
8 (7)
    7 vs 8
    6 vs 8
    5 vs 8
    4 vs 8
    3 vs 8
    2 vs 8
    1 vs 8

1 个答案:

答案 0 :(得分:1)

首先,你没有严格定义什么是"均匀分布"配对。所以我建议这意味着每对球队都要打1场或2场比赛。有了这个限制,我有一个原始案例的解决方案和一般案例的一些想法。

原始案例

8支球队,每支球队必须打10场比赛,1支队伍不应该和5支球队一起打球。这是比赛矩阵:

    1  2  3  4  5  6  7  8
    ----------------------
1 | 0  2  2  1  0  1  2  2
2 | 2  0  1  2  1  2  1  1
3 | 2  1  0  2  2  1  1  1
4 | 1  2  2  0  2  1  1  1
5 | 0  1  2  2  0  2  2  1
6 | 1  2  1  1  2  0  1  2
7 | 2  1  1  1  2  1  0  2
8 | 2  1  1  1  1  2  2  0

相同的矩阵,细胞根据值着色:

enter image description here

此矩阵是对称的,每行(和每列)总计最多10个,这意味着每个团队的游戏总数根据需要为10。所有值都是1或2,除了主对角线上的零(团队不自己玩)和(1,5)和(5,1)单元格(团队1和5不相互玩)。

一般情况

我将解释如何通过多个步骤构建原始案例的矩阵。这些步骤可以针对几种不同的条件进行推广。但并不适合所有人。我不建议解决最常见的案例。

  1. 从矩阵开始,所有参加比赛的球队都可以参加一场比赛。该矩阵的行总和为[6 7 7 7 6 7 7 7],其中6代表位置1和5。
  2. 尝试使每行的总和相同。为此,在1和8,1和7,5和4,5和3,2和6之间添加游戏。总和现在为[8 8 8 8 8 8 8 8]。好的。
  3. 尝试为每个团队添加两个游戏,禁止前一个项目中的对。在此步骤中,仅对前四个团队执行此操作。在1和2,2和4,4和3,3和1之间添加游戏。总和现在为[10 10 10 10 8 8 8 8]
  4. 重复前四个小组的上一个模式。 Sum现在是[10 10 10 10 10 10 10 10]。每对队伍(允许参加比赛)可以进行1或2场比赛。我们已经完成了。
  5. 另一个想法,可能会有所帮助。在均匀分布的匹配中,允许对之间的游戏数量可以相差不超过1.我们可以将其视为:所有对都玩N个游戏,并且几个对玩N+1个游戏。我开始时所有对在我的解决方案中玩1场比赛。并且它给出了初始总和,必须通过选择这几对来玩一个额外的游戏来纠正。因此,一般问题可能重新拟定如下:如何将几个问题放入零对称矩阵的允许位置,以使行的总和等于给定的向量?