我正在寻找算法,使单一消除和双重消除括号。
第一步是计算出种子播种算法,byes包括在内,我在以下几个地方找到了这个算法:这里 (在这里,byes可以简单地被引入,代替最后的n个超额团队并移动种子位置n次)和这里 (byes是烤好的,我只需要移动位置)。
这是对我所使用的算法的一个改进:像这样的配对团队:[(x, -x - 1) for x in range(num_players / 2)],而不是像人们预期的那样定义下一轮:Winner Match_i vs Winner Match_i+1,它将是Winner Match_i vs Winner Match_n-i,非常不直观,也很难维护。
但现在,我试图定义算法,以形成括号。我很难找到生成单个消除括号和双消除括号的实际算法。
我不太担心单一消除支架的产生,因为这是相当简单的,即使是再见,也考虑到我支持不同的安慰模式。
但双重淘汰括号让我失望了。无论我看哪里,它们都是以不同的方式建造的。这不仅是因为我不能选择其中之一,而且我也不知道如何使比赛之间的关联,特别是当涉及到byes时,因为它们打破了括号结构,使问题更难解决。
我会张贴我的代码,但它是相当长的,混乱的,它有一些错误,其中没有正确地生成括号,这就是为什么我正在寻找更可靠的括号生成算法。
发布于 2017-07-01 14:27:58
由于给你密码和指向资源都不是主题,我将尝试向您展示如何使编写自己的解决方案更容易。
与其让自己感到头晕目眩,不如咨询领域专家:
有两种方式来运行单一或双淘汰赛-“盲抽签”或“种子队”。种子比赛通常与联赛或赛季项目一起进行,这样就可以确定技术水平。排名第一的球队队员排名最低的种子,排名第二的球队踢第二低的种子等等。您将需要估计的球队数量,以确定您想要一个单一或双淘汰赛。在确定之后,遵循单打或双淘汰赛的规则。erasabletournamentbrackets.com种子锦标赛
这意味着,为了使它成为种子,我们需要在比赛开始前把球队排在第一位。如果我们把它们随意放置,那它就是瞎子。听起来我们所要做的就是在做种子时添加一个排序步骤。在此之后,我们应该能够对种子和盲人使用相同的代码。


仔细比较这两种情况,你会发现它们的工作原理是非常相似的。不同的是顺序。1打16是建立比赛的好方法,因为你所要做的就是把它们按顺序排列,然后把最好的和最差的进行匹配。这种从最好到最坏的模式在我们从一轮到另一轮的过程中重复。这确保了,如果胜利者总是排名最高的,那么1就不会在尽可能长的时间内面对2。对于任何2的幂,这应该是可能的。
所有这些都可以通过根据赛前排名对最后一轮的获胜者进行排序,然后再做一次。也要为输家这样做,你就有了下一轮的输家一方的双重淘汰。
最后,让赢家的胜利者面对失败者的胜利者。
所以,让我们说,你可以让所有这些发挥作用。那拜拜呢?
拜拜,b,ī,名词1,在没有指定对手的情况下,直接将竞争者转移到下一轮比赛。来自新牛津美国词典。
为了模拟一场比赛,我会拿出我最喜欢的模式。空对象模式只需创建一个空的竞争对手,表示没有指定的对手,就可以让您不使用之前的所有代码。多么?他们总是很放松。这样你就可以有不以2的幂开始的括号。比如12:

仔细看,你可能会注意到它与16名球员种子场有什么共同之处。除了一些斑点被抹去之外,一切都是一样的。这些擦除的点是放置空对象球员的地方,这些玩家总是松了。
要使打印工作,您只需取消打印一个括号,其中有一个空对象播放器。
这意味着,您可以自由地在第一轮或任何一轮,而不改变您的代码,只是介绍球员谁总是松散,不打印他们的支架。
有了这些byes,应该可以将其推广到任何数量的竞争对手。
https://softwareengineering.stackexchange.com/questions/351914
复制相似问题