从前一组阶段生成单场淘汰赛的算法
Posted
技术标签:
【中文标题】从前一组阶段生成单场淘汰赛的算法【英文标题】:Algorithm for generate single elimination round from previous groups phase 【发布时间】:2021-12-29 14:56:06 【问题描述】:我的比赛有两个阶段,小组+单淘汰。小组赛结束后,每组的x名进入单淘汰赛(括号格式)。在括号阶段有两个基本规则:
不应将一个组的获胜者与另一个组的获胜者匹配 小组赛(只针对第 2 或第 3 名) 不应将同一组中的两支球队相互匹配。例如,如果我们有两个这样的组:
Group A -> 1ºA, 2ºA, 3ºA, 4ºA
Group B -> 1ºB, 2ºB, 3ºB, 4ºB
并且每组的所有队伍都进行,淘汰赛应该是:
1ºA vs 4ºB
2ºB vs 3ºA
1ºB vs 4ºA
2ºA vs 3ºB
我正在寻找一种算法来帮助我按该顺序创建淘汰赛。
为了澄清,再举一个例子:
如果我们有四个这样的组:
Group A -> 1ºA, 2ºA, 3ºA, 4ºA
Group B -> 1ºB, 2ºB, 3ºB, 4ºB
Group C -> 1ºC, 2ºC, 3ºC, 4ºC
Group D -> 1ºD, 2ºD, 3ºD, 4ºD
淘汰赛应该是:
1ºA vs 4ºD
2ºB vs 3ºC
1ºC vs 4ºB
2ºD vs 3ºA
1ºB vs 4ºC
2ºA vs 3ºD
1ºD vs 4ºA
2ºC vs 3ºB
谢谢。
【问题讨论】:
你使用什么编程语言? 嗨,我正在使用 php 【参考方案1】:在 PHP 中这很简单.. 您只需获取第二个数组的长度,然后向后计数键。请注意,几乎在任何语言中,逻辑都是相同的,只是语法略有不同,具体取决于语言。 JS、Python、PERL、Java 等应该看起来都差不多。
<?php
$group_a = array();
$group_a[0] = '1';
$group_a[1] = '2';
$group_a[2] = '3';
$group_a[3] = '4';
$group_b = array();
$group_b[0] = '1';
$group_b[1] = '2';
$group_b[2] = '3';
$group_b[3] = '4';
// If team counts don't match, stop program
if ( count($group_a) != count($group_b) )
die("Group team counts do not match");
// Set key to group b array count
$group_b_key = count($group_b);
foreach($group_a as $item)
// count backward from 4 ( 4-1 = 3 )
$group_b_key --;
echo "$item-A vs " . $group_b[$group_b_key] . "-B\n";
这应该输出:
1-A vs 4-B
2-A vs 3-B
3-A vs 2-B
4-A vs 1-B
【讨论】:
嗨扎克,感谢您的回复。匹配是正确的,但我需要在括号中以正确的顺序生成数学。就是那个问题。 1ºA 与 4ºB、2ºB 与 3ºA、1ºB 与 4ºA、2ºA 与 3ºB 我已经用另一个例子更新了帖子。以上是关于从前一组阶段生成单场淘汰赛的算法的主要内容,如果未能解决你的问题,请参考以下文章