【问题标题】:Football league scheduling algorithm (with sync. home/away)足球联赛调度算法(带同步主/客场)
【发布时间】:2013-02-09 02:22:47
【问题描述】:

我正在制作一个自动足球联赛生成器,但未能如期进行。 我有一个生成所有内容的算法,但没有时间表。看看:

[tour-id] => Array
    (
        [playing-day] => 2013-03-07
        [tour (tour-id+1)] => 9
        [game-id] => Array
            (
                [blue team-id] => 13
                [red team-id] => 10
            )

例如:

[8] => Array
    (
        [playday] => 2013-03-07
        [tour] => 9
        [0] => Array
            (
                [blue] => 13
                [red] => 10
            )

        [1] => Array
            (
                [red] => 15
                [blue] => 12
            )

        [2] => Array
            (
                [blue] => 6
                [red] => 11
            )

现在,当我获得所有这些数据时,我可以只使用几个 foreach() 来获取我需要的东西。但是 - 我想要的事情是正常地将团队放入红色和蓝色团队。

我的意思是:

  • 一方(蓝队或红队)最多可玩 2 次;
  • 一轮中的一支球队必须在一轮中进行$totalTours/2 比赛。

例如,如果有 9 支球队,则在第一轮中,一支球队必须参加 4 场红色巡回赛(总共,不是连续)和 5 场蓝色巡回赛。在第 2 轮中,它必须进行 5 次红色巡回赛,4 次蓝色巡回赛。

即使有 100 个团队,算法也必须有效。

【问题讨论】:

  • 我觉得,您的规则约束(一侧的一个团队(蓝色或红色)最多可以玩 2 次;)无法为无限数量的团队生成时间表
  • 感谢您的回答。这一定是可能的。看看真正的足球联赛,例如英超联赛。连续的一方不超过 2 场比赛。我知道这有点复杂,工作了 7 个小时,仍然无法得到答案。
  • @eicto 只提出关于无限数的问题。还应该注意的是,您所比较的足球联赛可能拥有一半的球队。更多团队 = 计算时间更长。
  • @MC 如果无法获得银河冠军,那么制造这样的发电机是浪费时间:)
  • @eicto:没错,但他们可能有大量的量子计算机可以使用...... :)

标签: php algorithm schedule sports-league-scheduling-problem


【解决方案1】:

要构建一套固定装置,您需要每支球队都精确地互相比赛一次。

这样做的一个不错的方法是围绕单个固定元素“旋转”元素。

固定数字 1,我们需要

第一轮是

 1 2 3 4 5 
 v v v v v
10 9 8 7 6

第二轮是

 1 10 2 3 4
 v  v v v v 
 9  8 7 6 5

第三轮是

 1 9 10 2 3
 v v  v v v 
 8 7  6 5 4

以此类推,直到数字一直旋转。

我使用这种方法在 JavaScript 中构建了一组固定装置: https://jsfiddle.net/jonwinstanley/9dfLm8nq/97/

【讨论】:

    【解决方案2】:

    我认为您应该检查 round-robin tournament-算法。 通过这种方式,您可以轻松地安排您的比赛,并且该地点将成为可选的。 到达时间后,可以设置位置homeaway

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多