Algorithm 淘汰赛需要多少轮
我只是想知道是否有人有一个公式来评估单淘汰赛中的轮数: -参与的团队数量(可以大于2) -下一轮合格队伍的数量 这对于每轮比赛都有2支合格队伍的1v1或1v1v1来说很容易,但我被1或2支合格队伍的1v1v1困住了 谢谢 根据要求,举例如下: 让我们从32名玩家开始,他们在“免费”模式下一次玩4个COD(每个玩家单独对抗其他玩家) 在这里,我们想知道,如果我们选择在每场比赛中保留1名、2名甚至3名最佳球员,那么在一场有4名球员的决赛中需要多少轮 第一种情况:如果我们保留每场比赛中最好的2场:Algorithm 淘汰赛需要多少轮,algorithm,Algorithm,我只是想知道是否有人有一个公式来评估单淘汰赛中的轮数: -参与的团队数量(可以大于2) -下一轮合格队伍的数量 这对于每轮比赛都有2支合格队伍的1v1或1v1v1来说很容易,但我被1或2支合格队伍的1v1v1困住了 谢谢 根据要求,举例如下: 让我们从32名玩家开始,他们在“免费”模式下一次玩4个COD(每个玩家单独对抗其他玩家) 在这里,我们想知道,如果我们选择在每场比赛中保留1名、2名甚至3名最佳球员,那么在一场有4名球员的决赛中需要多少轮 第一种情况:如果我们保留每场比赛中最好的2场: 2
2nd round : 16 players distributed in 4 matches of 4 players
第二种情况:如果我们只保留第一种
2nd round : 8 players distributed in 2 matches of 4 players
(在第二种情况下,我们可以预见一个问题,因为在下一个回合,我们只剩下2名球员,这不足以填满一场比赛)
我们的想法是找到一个数学公式,用以下变量给出必要的轮数:
* NumberOfPlayers : the quantity of initial participants
* NumberOfPlayersInAGame : the quantity of participants in a game
* NumberOfPlayersQualifiedInAGame : the quantity of participants qualified for the next round in after a game
享受:在一次淘汰赛中,根据定义,每场比赛将淘汰一名参赛者。因此,如果有N名参赛者,并且比赛以产生M名优胜者的方式结束,则根据单个淘汰赛的定义,必须完成N-M场比赛。通常情况下,M等于1,因此必须进行N-1匹配
同样,每一轮都可以进行分析,如果一场比赛由两名参赛者组成,以确定一名胜利者,那么一场有2*N名参赛者和N名幸存者的比赛必须有2*N-N=N场比赛。如果有2*N+1名参赛者,其中一名参赛者说再见,则该轮有N+1名幸存者,并且必须进行2*N+1-(N+1)=N场比赛
通过从所需的单个获胜者向后工作,注意到每轮参赛者只玩一场比赛的限制,从而只淘汰一名参赛者,那么K轮的单个淘汰赛支持的参赛者的最大数量是2^K。对于
1
在K
锦标赛中的获胜者(例如,k=3
表示1v1v1)和N
玩家,其中N
元素k^x
和x
是一个正整数,需要g
游戏(java代码):
“1v1v1”是什么意思?是什么让一支球队合格?如果一轮中剩下两名球员,他们会玩1v1v1吗?如果剩下一名球员,你会和两名玩1v1的球员建立两个小组吗?或者这是如何处理的?如果有两支球队合格,这意味着有两名胜利者?@Adam它的意思是“免费”,每个玩家与N-1个其他玩家竞争。在游戏结束时,计算排名,合格者为第一名、第一名和第二名,如果我们在,可能是第三名1v1v1v1@maraca不。在整个比赛中,您仍然使用相同的格式。例如,在三个1v1v1中,只有obne合格的,则是赢家s将在新的1v1v1轮中一起比赛。如果每场比赛有2名合格选手,我们可以与合格选手进行2场新的比赛。顺便说一句,我不寻找算法,我可以轻松地完成。其想法是找到一个数学公式,该公式为我提供必要的轮数,并包含以下变量:nulberOfPlayers,NumberOfPlayersInAGame,NumberOfPlayers QualifiedIngame。对于1v1v1come,锦标赛评定了2项最佳成绩,以简化树的管理(然后它变得更像1v1)。根据您所说的,我们可以推断,在一个游戏中只有一名合格和P名玩家的情况下,对于N名参赛者,我们有P^k=N,所以k=log(N)/log(P)。对吗?但如果我们的合格率高于第一名呢?@Mouais:请再来一次-我一个字都听不懂。一场比赛的参赛人数可能超过2人,合格人数可能超过1人。这澄清了我的评论吗?很好的一个@maraca。我可以添加“w”变量,即参赛人数赢家:players=w*players/k;:)@Mouais是真的,但每轮的游戏数仍然是players/k,如果(players
int logk(int k,int n){if(n。感谢您的接受。或者更好:int-ret=0;而(n>=k){n/=k;ret++;}返回ret代码>
* NumberOfPlayers : the quantity of initial participants
* NumberOfPlayersInAGame : the quantity of participants in a game
* NumberOfPlayersQualifiedInAGame : the quantity of participants qualified for the next round in after a game
public int countGames(int players, int k) {
if (players <= 1) {
return 0;
} else {
players = players / k;
// the number of remaining players per round is the same as the number of games
return players + countGames(players, k);
}
}
g = sum(i from 1 to logk(N), k^(i-1)) ( logK(N) = ln(N) / ln(k) )