单场淘汰赛算法

Posted

技术标签:

【中文标题】单场淘汰赛算法【英文标题】:Single Elimination Tournament Algorithm 【发布时间】:2015-08-16 13:23:51 【问题描述】:

我是这个领域的新手,我想做一个 Java 应用程序来实现单场淘汰赛技术,让我导入球员姓名和他们的俱乐部,并让应用程序(通过算法)为我创建单场淘汰赛带有基于特定标准的球员姓名的锦标赛括号,例如:来自同一俱乐部的两名球员不能互相比赛或两名赢得过以前冠军的球员不能互相比赛......等等

无论如何我该如何启动这样的算法?

【问题讨论】:

这些标准必须保持多长时间?如果他们只需要保持在支架的最低水平,那么你只需要安排它,以便同一俱乐部的两名球员不会彼此相邻。如果您希望您的标准至少适用于两个级别的括号,那么来自同一俱乐部的球员不能属于同一组四人组(0,1,2,3 或 4,5,6,7要么 ...)。另外,如果你的标准是自相矛盾的,会发生什么?举个简单的例子,如果超过一半的球员来自同一家具乐部,那么您无法避免来自同一俱乐部的两名球员在第一级比赛中相互对抗。 【参考方案1】:

忽略两名球员赢得过往届冠军的问题,只考虑俱乐部,这就是我的建议。首先,添加另一个名为 BYE 的俱乐部,其中有足够多的球员 bye0, bye1, ...,这样对于一些 n,球员的总数是 2^n。 (2 给出 n=1,4 给出 n=2,8 给出 n=3,16 给出 n=4,...)。

我们从树的根开始向下 n 级构建锦标赛支架。从根本上说,我们拥有所有的玩家。要向下移动一个级别,一半的玩家必须向左走,一半的玩家必须向右走。尝试在那个阶段将每个俱乐部分成两半,使俱乐部 0 中的一半球员向左,俱乐部 0 中的另一半球员向右。唯一需要处理的问题是奇数,但由于奇数球杆的数量必须是偶数,奇数出局的人可以交替向左和向右。

以这种方式继续递归向下树。最后,您应该在括号的最低级别尽可能统一地分配球员和轮空。

【讨论】:

以上是关于单场淘汰赛算法的主要内容,如果未能解决你的问题,请参考以下文章

缓存淘汰算法之2Q

缓存淘汰算法

LRU 缓存淘汰算法

轮空 %4 的双淘汰赛算法

缓存淘汰算法-LFU

缓存淘汰算法--LRU算法