生成单个淘汰赛

Juc*_*uck 2 php algorithm math

首先,对不起我的英语我会尽力解释我的问题!

所以,我正在尝试用无限数量的玩家产生一场淘汰赛.

现在我只是想着它,我什么都没有在纸上,我想我不会有两个(2 4 8 16 32名球员......)的比赛的问题,我的大脑挂在球员直接进入第2轮,我不知道如何确定这个数字以及放置它们的位置.

例如(有59名球员) 例如(有59名球员)

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

谢谢你能帮助我!

rai*_*7ow 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的球员,和2最小功率至少一样大NP.现在...

  • 第一轮应该有(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的幂).