计算可能的锦标赛结果

Posted

技术标签:

【中文标题】计算可能的锦标赛结果【英文标题】:Calculating possible tournament outcomes 【发布时间】:2013-11-18 03:32:21 【问题描述】:

我正在尝试用 php 编写一段代码,它将为每个团队制定循环赛类型锦标赛的最佳和最差可能结果。

此代码将在每轮比赛后执行,因此将查找每支球队的当前 WLT 记录以及每支球队未来的比赛时间表(所有这些信息都已存储在数据库中)。

我最初的想法是遍历每支球队的排名排列,并记住每支球队表现的极限。然而,经过进一步思考,我意识到在这种情况下,对于 12 个团队来说,这将导致超过 4.79 亿个排列(这可能需要一点时间来计算,更不用说简洁的代码了)。

不幸的是,我担心自己在设计一个逻辑系统来处理这个问题时已经达到了我的想象力的极限,所以任何人都可以提供任何帮助。

提前干杯 爱德华

【问题讨论】:

最好和最坏的情况不就是球队每场比赛要么赢要么输吗? @mikeyq6 不,OP 想要在每一轮之后重新计算 ods。 @user2961751,您需要添加更多详细信息。此外,您需要提供一个非常具体的问题,例如“我如何计算 12 的排列...”等,以及添加代码示例或至少是伪代码时获得的最佳结果。 IE。在这里,您可以添加一个示例伪代码或 php 代码来说明这将如何进行。 可能的结果是“全部”,除非您正在为 NCAA 建模:) 【参考方案1】:

我假设输了 0 分,平局 1 分,赢了 2 分。

For each team t
    Sort the teams by their current point table so the last place
    team(s) come first and the top teams come last. Put all teams tied with t before t.
    Let i be the position of team t in this list
    From here on I'll name teams by their position in the list. So we have
    from left to right, teams currently worse than i, teams tied with team i, team i,
    and finally teams better than i.
    Make a working copy  of your matrix. For the rest of this
         iteration I'll implicitly refer to the working copy.
    Suppose (in the working copy) that team i has loses all its remaining games.
    For j from 0 up to i
         Make a backup copy of the working copy. 
         for( k:=n-1 ; k < j and j is behind or tied with i ; k := k-1 )
             If k hasn't played j and j is behind i
                 suppose that j beats k
             Else if k hasn't played j /* and is tied with k */
                  suppose that j ties k
          if j is still behind i
             revert to the backup made before the preceding loop
          discard the backup copy
          for all games j has yet to play suppose j loses

     At this point, all remaining games in the working copy are between teams ahead
     of team i, assume all remaining games are ties.
     Now (if we have really constructed a worst case scenario) the rank of team i
     in the working copy is the worst it can do. I.e. team i beats "count

我不完全确定这给出了确切的下限。上限是对称的。

【讨论】:

感谢您的帮助 Theodore,此解决方案假定过去的表现与理论上的最佳和最差表现有关(除非我误解了您的逻辑),但事实并非如此。我的问题是,例如,a 队可能已经输给 b 队数百次,但它仍然可以在上次比赛时获胜,例如 不,我假设是单循环。 IE。总共 n(n-1)/2 场比赛。我认为这个想法可以扩展到更一般的情况,但我不太相信它给出了正确的答案。 我对这个系统的担忧是,它似乎仍然根据以前的结果来假设未来的结果,我不希望它这样做。 这不是我的本意,所以我没有很好地解释这个想法。我也有一些更好的新想法。所以我会撤回这个答案。

以上是关于计算可能的锦标赛结果的主要内容,如果未能解决你的问题,请参考以下文章

逻辑排序的锦标赛赛程

616

用于比较一对一锦标赛的有效算法

计算瑞士系统锦标赛比赛次数的算法

数据结构:排序|| 选择排序

胜率计算 - 来自 Leaguepedia 的 Php 和 api