从前一组阶段生成单场淘汰赛的算法

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 我已经用另一个例子更新了帖子。

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

SSL连接分为两个阶段:握手和数据传输阶段

《数据结构与算法之美》28——动态规划理论

Linux 基础知识

React中Diff算法源码浅析

郑捷《机器学习算法原理与编程实践》学习笔记(第二章 中文文本分类—朴素贝叶斯算法)

ssh