生成单个淘汰赛

时间:2014-04-04 10:06:33

标签: php algorithm math

首先,抱歉我的英语我会尽力解释我的问题!

所以,我正在尝试用无限数量的玩家来制作一场淘汰赛。

现在我只是想着它,我没有任何纸上谈兵,我想我不会有两个(2 4 8 16 32名球员......)比赛的问题,我的脑子挂在玩家直接去第2轮,我不知道如何确定这个数字以及放置它们的位置。

例如(有59名球员) eg (with 59 players)

我认为有一个公式,但我找不到它,我有一些想法,但我对一个案例过于具体,而不知道它是否适用于另一个案例。

谢谢你能帮助我!

2 个答案:

答案 0 :(得分:11)

对于给定的数字N,找到它与2的最小幂之间的差值,至少与N一样大。对于59,这将是5(64 - 59)。这5名球员将被添加到第二轮的比赛日程中。

该算法允许所有玩家在第二轮开始时(即尽可能早地)成为游戏的一部分。它的解释非常简单:想象一下原本有2 ** N个玩家 - 但是有些人没有参加他们的比赛,所以他们的对手在没有战斗的情况下走得更远。 )

作为旁注,你的公式应该考虑到它是第二轮应该进入比赛的最强的球员,而不是最弱的球员。 )


第一步显然是计算将参加第一轮的球员数量。现在,让我们继续“缺少玩家”的比喻 - 假设最初有64名玩家,所以第一轮应该有32场比赛。但是有5名球员(64-59)没有参加这些比赛 - 因此真实比赛的数量是27(64/2 - 5),第一轮的真实参赛者数量是54(27 * 2)。

在第一轮比赛结束后,比赛还剩下27人 - 这些人将加入其他5人,所以第二轮选手的总人数是32人。其余的都是微不足道的,我想。 )

实际上,这很容易通用化。假设我们有N个玩家,并且至少与N一样大的2的最小幂是P。现在...

  • 第一轮应该有(N - (P - N))(或只是(2*N - P))球员。
  • 第一轮比赛的总数为(N - P/2)
  • 显然,进入第二轮的球员数量也是如此。
  • (P - N)球员将在第一轮没有比赛的情况下加入, 所以第二轮的球员总数将是......

N - P/2 + P - N => P - P/2 => P/2

  • ...从现在开始你只需要2 ^ N个玩家的直接时间表(因为P / 2,以及P,是2的幂)。

答案 1 :(得分:0)

哦,谢谢你@ raina77ow,你引起了我的注意,所以这是我的计算:

64/2 = 32
59/2 = 29 ( rounded to the lower ) => nb of total player at left ( round 1 & 2)
32-29 = 3 => nb players at left going to round 2
29-3 = 26 => nb players at left going to round 1

59-29 = 30 => nb total players at right ( round 1 & 2 )
5-3 = 2 => nb players going to round 2 at right
30-2 = 28 = nb players round 1

` 我想我现在可以制作一个算法,如果它适用于每个案例。