体育比赛日程表,换对

Posted

技术标签:

【中文标题】体育比赛日程表,换对【英文标题】:Sports tournament schedule with changing pairs 【发布时间】:2021-11-21 19:24:45 【问题描述】:

假设有 8 名球员参加沙滩排球比赛。 比赛以 2 对 2 进行。

作为组织者,我想为具有以下规则的玩家生成时间表:

每个玩家和大家一起玩(每个玩家 7 场比赛) 每个玩家与每个玩家对战两次

所以时间表会开始,例如:

round 1 
player1 + player2 vs player3 + player4
player5 + player6 vs player7 + player8

round2
player1 + player3 vs player2 + player5
player4 + player7 vs player6 + player8

round3
player1 + player4 vs player2 + player3
player5 + player8 vs player6 + player7

etc

通过上面的例子,让我们想想 player1。 他一直和球员(2,3,4)一起比赛,所以他还和球员(5,6,7,8)一起比赛

他一直在比赛:

Player3 (twice)
Player4
Player2 (twice)
Player5

所以剩下的 4 场比赛(球员 1)应该和球员 5,6,7,8 一起打,对手不能是球员 3 或球员 2(因为你已经和他们打过两次了)

我在这里看到了很好的例子How to automatically generate a sports league schedule 和关于循环的***文章https://en.wikipedia.org/wiki/Round-robin_tournament(Richard Schurig (1886) 的配对表的原始构造)可以很好地生成匹配,但是会有更多与一些球员进行两场比赛。

非常感谢任何帮助!

【问题讨论】:

这是社交高尔夫球手问题的一个变体。请参阅 wikipedia 或 mathpuzzle 了解以编程方式处理此问题的想法。 【参考方案1】:

是的,这可以在有限域 F8 的帮助下完成。我们用 F8 的元素之一来识别每个玩家。让tp 是F8 的任何不同的非零元素。在 F8 ∖ 0(七元素)中,rr 进行回合,玩家 xx + r t 作为队友和 x + r px + r p + r t 作为对手。

由于x + r 987654339 @ + r 987654341 @ = xx + r 987654345 @ + r 987654347 @ + r 987654349 @ = x + r p 在特征 2 的场地中,每个玩家每回合恰好有一个队友,他们的两个对手是队友。对于一对玩家xy,他们是队友的回合是唯一确定的,因为等式x + r t = y(相当于x = y + r t) 只有一种解决方案。类似的推理说明了为什么每个玩家恰好在两轮比赛中与其他玩家对抗。

F8 = 
    (0, 0, 0): "a",
    (1, 0, 0): "b",
    (0, 1, 0): "c",
    (1, 1, 0): "d",
    (0, 0, 1): "e",
    (1, 0, 1): "f",
    (0, 1, 1): "g",
    (1, 1, 1): "h",



def f8_times(p, q):
    pq = (
        p[0] & q[0],
        (p[0] & q[1]) ^ (p[1] & q[0]),
        (p[0] & q[2]) ^ (p[1] & q[1]) ^ (p[2] & q[0]),
        (p[1] & q[2]) ^ (p[2] & q[1]),
        p[2] & q[2],
    )
    return (pq[0] ^ pq[3], pq[1] ^ pq[3] ^ pq[4], pq[2] ^ pq[4])


for a in F8:
    if any(a):
        print(" vs ;  vs ".format(*(F8[f8_times(a, b)] for b in F8)))

输出:

ab vs cd; ef vs gh
ac vs eg; db vs hf
ad vs gf; he vs bc
ae vs dh; gc vs fb
af vs be; ch vs dg
ag vs hb; fd vs ce
ah vs fc; bg vs ed

【讨论】:

天哪!非常感谢!例如,如果玩家人数从 8 变为 12/16 或从 8 -> 9/10(不除以 4)。当其他玩家在玩时,它仍然有效吗? @Hese 很遗憾,没有。 16 会很容易,因为有一个有限域 F_16,但其他的则需要更多的思考。

以上是关于体育比赛日程表,换对的主要内容,如果未能解决你的问题,请参考以下文章

循环赛日程表

比赛日程安排

算法之循环赛日程表

分治与递归-循坏赛日程表

数学建模比赛日程

2022年,ICPC比赛CCPC比赛CCF-CSP考试蓝桥杯比赛天梯赛日程