Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 淘汰赛需要多少轮_Algorithm - Fatal编程技术网

Algorithm 淘汰赛需要多少轮

Algorithm 淘汰赛需要多少轮,algorithm,Algorithm,我只是想知道是否有人有一个公式来评估单淘汰赛中的轮数: -参与的团队数量(可以大于2) -下一轮合格队伍的数量 这对于每轮比赛都有2支合格队伍的1v1或1v1v1来说很容易,但我被1或2支合格队伍的1v1v1困住了 谢谢 根据要求,举例如下: 让我们从32名玩家开始,他们在“免费”模式下一次玩4个COD(每个玩家单独对抗其他玩家) 在这里,我们想知道,如果我们选择在每场比赛中保留1名、2名甚至3名最佳球员,那么在一场有4名球员的决赛中需要多少轮 第一种情况:如果我们保留每场比赛中最好的2场: 2

我只是想知道是否有人有一个公式来评估单淘汰赛中的轮数: -参与的团队数量(可以大于2) -下一轮合格队伍的数量

这对于每轮比赛都有2支合格队伍的1v1或1v1v1来说很容易,但我被1或2支合格队伍的1v1v1困住了

谢谢

根据要求,举例如下:

让我们从32名玩家开始,他们在“免费”模式下一次玩4个COD(每个玩家单独对抗其他玩家)

在这里,我们想知道,如果我们选择在每场比赛中保留1名、2名甚至3名最佳球员,那么在一场有4名球员的决赛中需要多少轮

第一种情况:如果我们保留每场比赛中最好的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,如果(playersint 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)  )