对不重复的团队对进行排序 |循环赛

2024-02-02

我正在制定锦标赛的时间表。每支球队应该打 8 场比赛。队伍数量 2

为了将团队分成对,我使用循环算法来获取表格,例如 6 支团队:

然后我将其转换为对的集合:

1   4
2   3
3   2
4   1
5   6
6   5
1   2
2   1
3   5
4   6
5   3
6   4
...

问题是如何对这组比赛进行排序,以便获得赛程表,其中同一支球队不能连续打两场比赛。但如果不可能,请尽量减少例外的数量。


新算法的示例:


我将尝试开始一种方法来回答这个问题。如果有人问我,我可以将其保留为社区维基,以便人们可以进行编辑以改进此答案。

Wikipedia Round-robin Tournament Scheduling Algorithm https://en.wikipedia.org/wiki/Round-robin_tournament#Scheduling_algorithm

Let's start with the case of 8 teams. [T1, T2, T3, T4, T5, T6, T7, T8]

让我们尝试这样看待这个问题..

T1 T2 T3 T4
T5 T6 T7 T8

那么,现在。匹配 -> [(1,5), (2,6), (3,7), (4,8)]。

Rotate the list clock-wise, but keep position of T1 fixed.

T1 T5 T2 T3
T6 T7 T8 T4

那么,现在。匹配 -> [(1,5), (2,6), (3,7), (4,8),(1,6),(5,7),(2,8),(3,4)]。

在这种情况下,在重复开始发生之前将有 7 次可能的轮换。在传统的循环赛中,有(n/2)*(n-1)游戏,在哪里n是团队的数量。无论涉及多少团队,这都应该有效。 [如果你遇到n%2 == 1,放一个X使比赛保持平衡并继续正常进行;一支球队将缺席一场比赛]。

如果你需要确保每个团队must玩 8 场比赛,exactly当球队数量为偶数时,进行8次轮换。

该方法相应地保证了在给定足够数量的球队的情况下,相同的球队不会进行背靠背的比赛。

Edit.

Let's start with the case of 3 teams. [T1, T2, T3]

让我们尝试这样看待这个问题..

T1 T2
T3 X

那么,现在。匹配 -> [(1,3), (2,X)]。

Rotate the list clock-wise, but keep position of T1 fixed.

T1 T3
X   T2

那么,现在。匹配 -> [(1,3), (2,X),(1,X),(3,2)]。

下一个案例,匹配 -> [(1,3), (2,X), (1,X), (3,2),(1,2),(X,3)]。

下一个案例,匹配 -> [(1,3), (2,X), (1,X), (3,2), (1,2), (X,3),(1,3),(2,X)]。

....

匹配 -> [(1,3), (2,X), (1,X), (3,2), (1,2), (X,3), (1,3), (2,X), (1,X), (3,2), (1,2), (X,3), (1,3), (2,X), (1,X), (3,2), (1,2), (X,3), (1,3), (2,X), (1,X), (3,2), (1,2), (X,3), (1,3), (2,X), (1,X), (3,2), (1,2), (X,3)].

1 -> [3,X,2,3,X,2,3,X,2,3,X,2]
2 -> [X,3,1,X,3,1,X,3,1,X,3,1]
3 -> [1,2,X,1,2,X,1,2,X,1,2,X]

如果您注意到这种模式,您就会发现在这种情况下,不可能确保球队不打背靠背比赛。每支球队需要进行 12 次轮换才能打完 8 场比赛。我正在尝试想出一个公式,并将相应地更新这篇文章。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对不重复的团队对进行排序 |循环赛 的相关文章

  • 为什么Python中pop()的大O与pop(0)不同[重复]

    这个问题在这里已经有答案了 他们不应该都是O 1 因为从 Python 列表中的任何位置弹出一个元素涉及销毁该列表并在新的内存位置创建一个元素 蟒蛇的list实现使用动态调整大小的 Carray在引擎盖下 删除元素usually要求您移动后
  • 整数除法性质

    下面的整数算术性质成立吗 m n l m n l 起初我以为我知道答案 不成立 但现在不确定 它适用于所有数字还是仅适用于某些条件 即n gt l 该问题涉及计算机算术 即q n m q m n 忽略溢出 Case1 assume m kn
  • 为什么我们需要检测链表中的循环

    我看到很多关于如何检测链表中的循环的问答 但我想了解的是我们为什么要这样做 换句话说 检测链表中的循环的实际用例是什么 在现实生活中 您可能永远不需要检测链表中的循环 但是执行此操作的算法很重要 我在现实生活中多次使用它们 例如 我经常会递
  • 随着数据的增加自动填充公式并动态排序[重复]

    这个问题在这里已经有答案了 我想对工作表中的数据进行排序 该工作表每天都会在第二个工作表中获取新行 问题是 如果我使用 SMALL 函数并自动填充单元格直到最后一行 A102482 或类似的内容 我的文件会变得非常巨大且滞后 gt 20mb
  • 快速 HTML 表格排序?

    是的 我知道有一个lot有很多 JS jQuery 程序可以做到这一点 我目前正在使用http www kryogenix org code browser sorttable sorttable js http www kryogenix
  • 带有元数据的 scipy kdtree

    我目前正在寻找一种方法来构建几个 kd 树以快速查询一些 n 维数据 但是 我对 scipy KD 树算法有一些问题 我的数据包括id gt data somedata coordinate x y 我希望能够基于坐标和 k 最近邻居的 i
  • 链表插入排序

    我在编程的排序部分还不是很先进 所以我正在为我的算法寻求一些帮助 void sortList Item PTR tmpNxt current gt nextItem Item PTR tmpPTR current int a tmp whi
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • java中的Anagram算法

    我想做字谜算法但是 这段代码不起作用 我的错在哪里 例如 des 和 sed 是字谜 但输出不是字谜 同时我必须使用字符串方法 不是数组 public static boolean isAnagram String s1 String s2
  • R中按字母顺序对每一行字符串进行排序

    我环顾四周 似乎找不到解决这个问题的好方法 我有一个包含行名称的列 我想按字母顺序对每一行进行排序 以便稍后可以识别具有相同名称但顺序不同的行 数据如下 names lt c John D Josh C Karl H John D Bob
  • 查找数组中的重叠数据

    我们正在编写一个 C 应用程序 它将有助于删除不必要的数据重复器 只有在以下情况下才可以移除中继器 all它接收到的数据被其他中继器接收 我们第一步需要做的事情解释如下 例如 我有 int 数组的集合 A 1 2 3 4 5 b 2 4 6
  • 按共同关联的数量排序 (Rails)

    背景 我有帖子和用户 并且都有很多社区 客观的 对于任何给定的用户 我想返回一个帖子集合 按该帖子与该用户有共同社区的数量排序 具有更多共同社区的帖子位于更高的位置 我当前的尝试 使用排序方法 有效 Post includes commun
  • CSR 矩阵 - 矩阵乘法

    我有两个方阵A and B 我必须转换B to CSR Format并确定产品C A B csr C 我在网上找到了很多关于CSR 矩阵 向量乘法 http www mathcs emory edu cheung Courses 561 S
  • RNG 技术的可移植性和可重复性

    我可以使用两种方法之一来创建一个伪随机数序列 该序列具有两个重要特征 1 它可以在不同的机器上重现 2 该序列永远不会重复范围内的数字 直到所有数字都被发出 我的问题是 这两种方法在可移植性 操作系统 Python 版本等 方面是否存在潜在
  • Python 将字符串组合成尽可能短的字符串?

    如果我有一个字符串列表 我想将它们组合成一个具有重叠字符的字符串 如果没有剩余的重叠字符串 请将其添加到末尾 这是一个过于简化的版本 input one two output twone 我正在寻找一种方法来对输入列表中的任意数量的字符串执
  • 找到将一个数字转换为另一个数字的最小移动次数的算法

    假设我们有两个正整数 a 和 b 每次移动我们都可以将 a 除以 2 但前提是 a 是偶数 将 a 乘以 2 或者将 a 加 1 将a变为b需要多少步 找到一个直接公式或一种有效的算法 即以对数时间运行的算法 我取得的一些进展 我们可以把它
  • 为什么 n 按位和 -n 总是返回最右边的位(最后一位)

    这是Python代码片段 1 1 1 2 2 2 3 3 1 看来任何n n总是返回最右边 最后 位 我真的不知道为什么 有人可以帮助我理解这一点吗 这是由于负数以二进制表示的方式 称为二进制补码表示 创建某个数字 n 的补码 换句话说 创
  • std::__gcd 和 std::gcd 有什么区别?

    Many https www geeksforgeeks org stdgcd c inbuilt function finding gcd websites https codeforces com submissions Madiyar
  • 基于数组对列表进行排序

    我正在尝试根据字符串数组对自定义列表进行排序 但我失败得很惨 例如它根本没有对列表进行排序 Public class CrateOrder public int Id get set public string Name get set p
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通

随机推荐