【问题标题】:Double Elimination Tournament Algorithm for byes %4轮空 %4 的双淘汰赛算法
【发布时间】:2012-05-14 10:35:16
【问题描述】:

我正在尝试编写一个双淘汰锦标赛,其中括号基于 mod 4。第一轮应该处理所有轮空,以便在第 2 轮之后不再有轮空。我很难弄清楚确定我需要的轮空数量背后的实际数学。如果有人可以帮助我解决这背后的数学问题,将不胜感激。

对于任何 mod 4 (0,1,2,3) 我需要处理 1,2,3 的再见,有 4 个可能的答案。

我的意思的一个例子是 13 名球员(13%4=1) 所以第一轮括号应该看起来像 1对2 2vs3 3vs4 4对5 5对6

第二轮是 7对胜者 8对胜者 9对胜者 赢家对赢家,然后你有输家的括号

基本上,如果您熟悉网站 Challenge,我想生成与它们相似的括号,但我无法弄清楚它们确定轮空背后的数学原理。

如果有人做过类似的事情,我将非常感谢他的帮助。

【问题讨论】:

  • 我认为你走错了路,因为参加锦标赛的人数是 2 的幂,而不是 4 的倍数。
  • 你说得对,我的组长就是那个说mod 4的人......我不知道我为什么听他的。
  • after round 2 there will be no more byes 无法保证!如果您在锦标赛中的任何时候都有奇数玩家,则需要轮空。

标签: c# algorithm math tournament


【解决方案1】:

其中N是参赛者的数量,轮数将是:

nRounds = Math.Ceiling( Math.Log( N, 2 ) );

第一轮的名额为:

firstRoundSlots = Math.Pow( 2, nRounds );

排名靠前的竞争对手轮空,因此在您的示例中,16 轮比赛中有 13 名竞争对手,因此前 3 名竞争对手轮空。也就是说,byes的数量是firstRoundSlots - N

比赛的顺序有点复杂。基本上,这个想法是总决赛是最好的竞争对手与第二好的竞争对手。在半决赛中,最好的选手对战第三名的选手,第二名的选手对战第四名的选手。等等等等。所以最容易从决赛倒推生成顺序。

但是,如果您想知道一种用于反向生成回合顺序的算法(即,从第 1 轮开始并朝着决赛的方向努力),我在这里写了一篇关于此的博客文章:

http://blogs.popart.com/2012/02/things-only-mathematicians-can-get-excited-about/

【讨论】:

    【解决方案2】:

    我会告诉你我是如何解决这个问题的。
    您希望在第 2 轮中有许多玩家,这是 2 的幂。

    第2轮的玩家人数为:(matches in round 1)/2 + byes)
    设 P 为玩家人数。

    2^n = (P-byes)/2 + byes
    2^(n+1) = P-byes + 2*byes
    2^(u) = P + byes
    

    所以找到最小的u s.t. 2^u >= P,然后是2^u-P,再见。

    示例案例: 7 -> 2^u=8 -> (8-7) -> 1 再见
    1 轮空,3 场比赛 -> 第 2 轮有 4 名玩家

    这不是 mod 4,将 9 名玩家与 13 名玩家进行比较: 9 -> 2^u=16 -> (16-9) -> 7 个字节 13 -> 2^u=16 -> (16-13) -> 3 个字节

    一个更有趣的问题是如何安排最少轮空次数,允许在第一轮以外的其他轮次中进行轮空。

    【讨论】:

      【解决方案3】:

      我能想到的最简单的算法:

      1. 播种玩家(使用实际信息或一些随机的东西)
      2. 玩家的排名取决于当前积分,如果是平局,则取决于种子
      3. 在比赛的每个阶段,从排名最高的玩家到排名最低的玩家,将每个玩家与他们没有玩过的排名第二的玩家配对
      4. 排名最低的玩家通常会得到再见
      5. 如果一个人总共输掉两场比赛(或在平局盛行的情况下输掉两场比赛),那么这个人就退出了比赛
      6. 重复此操作,直到锦标赛中只剩下一个玩家

      【讨论】:

        猜你喜欢
        • 2015-08-16
        • 2013-06-15
        • 2016-11-03
        • 2010-10-10
        • 2012-11-10
        • 2012-06-12
        • 2017-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多