2007年,白兰恩足球俱乐部在挪威超级联赛中笑到了最后。球迷们欣喜若狂,他们都觉得胜利归属于于巴西球员阿兰齐尼奥。只有阿兰齐尼奥没有为白兰恩效力过,他曾效力于白兰恩的对手斯塔贝克。所以,这到底是怎么回事呢?

阿兰齐尼奥

在白兰恩胜利背后隐藏着许多球迷都熟悉但却又很少被拿出来谈论的现象。在天赋异禀的阿兰齐尼奥的帮助下,斯塔贝克在整个赛程中所向披靡,击败了一个又一个对手。在26轮的比赛中,白兰恩幸运的遇上了刚被斯塔贝克击败的对手。“这被认为是白兰恩的一个优势:他们可以有组织地对抗实力较弱的球队,”来自根特大学的运筹学教授Goossens说道。由于输掉的球队与之前对手的比赛中可能有红牌或停赛的产生,所以他们的实力被削弱了,而且他们在失败后士气低落。”因此,这个赛程让白兰恩很容易成为冠军。”

一般来说,在一轮比赛中,A队先和X队打,打完之后B队再和X队打,这种情况下A队会给B队带来延滞效应。如上文提到的例子所示,这种效应可能会给B队带来优势,但也会导致不利。Goossens解释道:“作为一个中间球队,你可以在第一场比赛中提升士气,因为你和一个弱队打了一场比赛,拿下比赛并且满怀信心地遇上下一个球队。”在这种情况下,X队将会受益,而B队也会受到影响。但无论谁受益,赛程应该合理安排,以避免一连串延滞效应在相同的两支队伍中不断发生,就像挪威联赛中发生的那样。

自2006年以来,Goossens和Frits Spieksma一直负责安排比利时职业联赛。当他们接手这项工作时,他们已经意识到了延滞效应带来的影响,他们决定看看其他足球联盟是如何处理的。考虑到许多与足球相关的因素,如金钱、大家的关注、球员的努力等,答案却是令人惊讶的:许多欧洲联盟以最糟糕的方式处理了这一问题。

旋转时钟

许多主要的联赛,包括德甲联赛,西班牙的西甲联赛和葡萄牙的西甲联赛,都使用了一种整洁而非常古老的几何方法来进行赛程安排。这种时钟方法是由英国数学家托马斯·彭迪恩柯克曼于1850年发明的,用来解决所谓的“女生问题”。

下面是它的原理。如果赛程包括n个队伍(n为偶数),则首先将前n-1个队圆形排列。然后将最后一个队伍放在圆心处,按如下所示的方式两两配对(这个方法适用于任何的偶数n):

这样就能得到赛程的第一轮。然后保持这些字母的位置不变,顺时针旋转这些线,于是就得到了如下的结果:

这就是赛程的第二轮。接着就是一直顺时针旋转这些线来得到所有的赛程安排。在最后一轮,你得到的结果如下:

这种方法得到的结果是一个n-1轮完整的赛程表,其中每个球队只和其他球队进行一场比赛并且没有冲突。

Round 1

Round 2

Round 3

Round 4

Round 5

Round 6

Round 7

A-H

A-C

A-E

A-G

A-B

A-D

A-F

B-G

B-H

B-D

B-F

C-G

B-C

B-E

C-F

D-G

C-H

C-E

D-F

E-G

C-D

D-E

E-F

F-G

D-H

E-H

F-H

G-H

一旦赛程的骨架出来以后,你还要考虑主客场的影响,妥善安排回程的比赛,将真实的队伍名称替代上述的字母,以满足可能拥有的其他约束条件,例如,两个球队共享一个体育场,就不能在同一天进行主场比赛。使用旋转时钟法也可以确定主客场的比赛,但是我们将忽略这些额外的任务,将主要的关注点放在如何创建考虑了延滞效应的赛程表。

正如上面表格中的颜色所显示的,F队带给了A队5次延滞效应。考虑到在这个例子中总共只有7轮比赛,所以这可不是好的赛程安排。要了解在整个锦标赛中,延滞效应会对比赛产生什么样的影响,我们可以创建一个个延滞效应有关的表格。与第X行和列Y对应的条目是X队给Y队带来的延滞效应的次数。我们这个例子中的延滞效应表显示了一个非常漂亮的模式,但它不是我们想要的。在7组配对中,某一个队总的给另一个队带来了5次延滞效应。

延滞效应似乎在某种程度上影响着比赛的结果,所以Goossens和Spieksma,以及Erik Lambrechts和Annette Ficker,决定对这个理论进行更深入的研究。他们发现,并在数学上证明了,当涉及到延滞效应时,旋转时钟法可能是糟糕得不能更糟糕的方法。

这是相当令人震惊的结果。“这是足球以及其他运动项目中最常见的赛程安排,但这样的安排非常糟糕的,我想我们可以为比赛的相对公平做点什么”Goossens说到。在学术文献中,延滞效应在20世纪80年代首次被提到,但由于某种原因,它并未受到足够的重视。“人们要么没有意识到这一点,要么他们意识到这一点,但他们不知道它的名字或者术语。”

最坏的结果

旋转时钟法带来的最糟糕的影响是什么?衡量延滞效应的影响的可行的方法是将影响的次数求平方和。(我们对表中数字的平方进行求和的原因是,只计算数字本身就会给出相同的结果。)在上面的例子中,这个值是196。Goossens和他的同事证明了使用时钟方法产生的赛程表得到的延滞效应值总是最大的。相反地,任何具有最大的延滞效应值的表都可以用时钟方法生成,例如通过改变字母在圆中排列的方式。

当一个球队遭遇停赛时,他们的对手在下一轮比赛中可能会受益。

为了让你能更直观的认识到延滞效应是多么糟糕,我们考虑n = 20支球队的比赛。最著名的时间表(在尽量避免延滞效应的影响的情况下制定的)得到的延滞效应的值是380。而旋转时钟法与之对应的值是5548。对于n = 24,两者分别是644和10212,这是多么巨大的差异啊!

争取平衡

旋转时钟法肯定是行不通了。理想情况下,我们希望有这样一个赛程表:在这个时间表中,某个球队在整个赛程中所施加给其他球队延滞效应应该是均匀分布的,也就是说,每个球队都能精准确定其他球队给自己带来延滞效应的次数。这样的赛程表就相对均衡了。在这种均衡的赛制里,延滞效应值为:n(n-1),而用时钟方法得到的值为:((n-3)2+3)(n-1)。

然而,要做到相对平衡是说起来容易做起来难。在所涉及的球队达到24支的比赛,我们只能找到n=4,8,16,20,22这些数目球队的平衡的赛程表。对于其他n的取值,我们要么知道一个平衡的表不存在,要么不知道它是否存在,或者存在的它是什么样。下面的表格告诉我们每个n都适用哪个选项。更一般的说,存在平衡表的n值一般是2的几次幂,但也有例外的,如20和22。很令人惊讶的是,在足球比赛的赛程安排里竟然也存在着未解决的数学问题。

然而,好消息也是有的。“一旦你不再完全依赖时钟方法,事情就会很快变得更好,”Goossens说到。“只是一些变化已经产生了一个更加平衡的赛程表。”

为了生成可供选用的赛程表,Goossens建议使用一些数学方法,这些方法是专门设计用来解决一些约束问题的,比如所谓的整数规划。一旦这样的方法给了你一个可供挑选的花名册,你就可以将它与时钟方法相结合从而获得更加平衡的赛程表。这样就可以尽量的减少延滞效应的值,并保留旋转时钟方法的一些优点。

在2007年溃败之后,挪威出台了一项明确的规则,以确保赛程表是相对合理平衡的。在比利时是没有明确规定的,但只要Goossens负责赛程安排,我们就可以很确定,延滞效应的影响肯定会被考虑进去并得到较好的解决。在世界各地和不同的体育运动中,人们对延滞效应的认识是否会增加还有待观察。但有一件事是可以肯定的:让一个数学专家来做你的日程安排会是一件好事。

∑编辑 | Gemini

翻译 | 山寺小沙弥

算法数学之美微信公众号欢迎赐稿

稿件涉及数学、物理、算法、计算机、编程等相关领域,经采用我们将奉上稿酬。

投稿邮箱:math_alg@163.com

数学结果告诉你足球的赛程安排并不能做到完全公平相关推荐

  1. Python解决数学建模问题:赛程安排

    五支足球队在同一场地上进行足球赛.进行单循环比赛,也就是说这五支球队的每两支球队在这次比赛中都要结对比赛一次.共进行十场比赛,在连续的十天中每天比赛一场.问:如何安排这次比赛的赛程对各队来说都是公平的 ...

  2. 图着色解决赛程安排问题(一)(考虑主客场)

    1. 问题描述 足球联盟内有6支球队:秃鹫,雄狮,飞鹰,海狸,猛虎,山猫.秃鹫已经对阵雄狮和飞鹰:雄狮也已经对阵海狸和山猫.每个队每周只赛一场.做一个赛程安排,使每个队与其他所有队互赛一场,且整个赛程 ...

  3. 图着色解决赛程安排问题(二)(不考虑主客场)

    1. 问题描述 足球联盟内有6支球队:秃鹫,雄狮,飞鹰,海狸,猛虎,山猫.秃鹫已经对阵雄狮和飞鹰:雄狮也已经对阵海狸和山猫.每个队每周只赛一场.做一个赛程安排,使每个队与其他所有队互赛一场,且整个赛程 ...

  4. 小技巧-不使用js制作高级足球比赛赛程表

    今天给大家介绍一种不使用js而用id来实现制作高级足球比赛赛程表(点击轮次即可显示出对应的轮次的赛程,后文会详细说明) 本文代码只展示核心代码 我们先用a标签写出轮次图的代码:(a里面的href使用i ...

  5. python足球联赛赛程_足球联赛赛程表工作表

    比赛时间 比赛对手 比赛地点 比赛服装 带队领导及教练 11月9日8:50 庐阳中学--五十六中 十九中 穿红带蓝 戴鹏程 罗春光 11月16日8:50 庐阳中学--四十八中 十九中 穿蓝带红 单军  ...

  6. 如何获取足球【赛程赛果】数据

    分享下之前调用过的足球[赛程赛果]数据,以下是一段示例调用代码及相应返回数据 import javax.xml.bind.JAXBContext; import javax.xml.bind.Unma ...

  7. 【程序8】乒乓球比赛赛程安排

    /*[程序8] * 作者 中国风 * 乒乓球比赛赛程安排 * 某学校举行乒乓球比赛,在初赛阶段设置为循环赛,设有n位选手参赛, * 初赛共进行n-1天, 每位选手要与其他每一们选手进行一场比赛, * ...

  8. matlab建模大赛程仁山,基于MATLAB赛程安排方案设计.doc

    基于MATLAB赛程安排方案设计 摘要 单循环赛是一种全面而公平的竞赛机制,赛程安排的恰当与否,在很大程度上影响比赛的结果.本文主要针对单循环赛的最优赛程安排方案建立相应的数学模型,给出最优赛程的安排 ...

  9. 分治算法实例:赛程安排(VB.net代码)

    Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadlblTel ...

最新文章

  1. pythoning ——3、数据类型(字符串)
  2. 「mysql优化专题」高可用性、负载均衡的mysql集群解决方案(12)
  3. jvm Classload method介绍
  4. 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)
  5. Spring Boot + Mybatis多数据源和动态数据源配置
  6. php 物理路径,网站物理路径查找思路
  7. Spring Boot和JSP
  8. InfluxDB学习之InfluxDB数据保留策略(Retention Policies)
  9. DotFuscator使用步骤
  10. ICSharpCode.SharpZipLib 压缩、解压文件 附源码
  11. 乐视超级电视再创辉煌?超5 X55全面屏电视上手体验
  12. android恢复出厂设置的流程
  13. CAD迷你看图 for Mac
  14. 190723每日一句 学会调整你的心态
  15. UAT 深入指南(用户验收测试)
  16. python什么字体好看_七个不一样的Python代码写法,让你写出一手漂亮的代码
  17. W3school:CSS基础:CSS注释、颜色(颜色、RGB、HEX、HSL)、背景(背景、背景图像、背景重复、背景附着、简写背景属性)
  18. Android中的PendingIntent 原理
  19. 不朽凡人 正文 第四百八十九章 三个条件
  20. jmeter 后置处理器

热门文章

  1. java 动态添加定时器_quartz实现任务动态增加和删除
  2. ReactiveCocoa入门
  3. 现代软件工程系列 学生的精彩文章 (2) 到底是谁的 bug?
  4. 同学, 你的板砖呢?
  5. hashmap扩容机制_图文并茂:HashMap经典详解!
  6. python中char的用法_如何从C++返回char **并使用cType在Python中填充它?
  7. Linux的实际操作:关机shutdown、重启reboot、用户注销logout
  8. python prettytable表格列数太多_excel列数太多了怎么办
  9. jira使用教程pdf_jira项目管理系统使用指南.pdf
  10. cfiledialog 保存 扩展名_儿童美术:油画棒 插画一组超萌的大饼脸小孩 保存了跟小朋友一起画吧...