迭代所有大小为 n 的独特循环赛

问题描述 投票:0回答:1

有 n 名参赛者的循环赛。也就是说,每对不同的节点 i 和 j 将相互竞争,结果可以表示为有向图,其中存在从 i 到 j 的边或从 j 到 i 的边。

现在,假设 n 为 3,因此节点为 i、j 和 k。从 i 到 j、j 到 k、k 到 i 可能存在一条边。另一种可能性是从 i 到 k、k 到 j、j 到 i 的边缘,但如果我执行的操作与“玩家”的身份无关,那么这些实际上是相同的锦标赛。也可能存在从 i 到 j、i 到 k 以及 j 到 k 的边,这是 3 个节点上锦标赛的另一个“类别”。

所以,我想提出一个程序,最好是用 Python 编写的,它将能够迭代 n 个参与者的每一个独特的锦标赛。

我现有的解决方案是生成一个长度为

n * (n-1) / 2
的位字段,并使用它来填充邻接矩阵的上三角形。然后,对于上三角形中的每个 0,下三角形中的相应条目是 1。显然,这将找到大小为 n 的每个循环赛锦标赛,但有许多实际上相同的锦标赛,并且它会大大减慢速度。我预计最多不需要在大于 15 的 n 中进行操作,但现在这是不可行的。

如果有人知道或可以导出一个公式来计算有多少个规模为 n 的独特循环赛,那肯定会有所帮助。

python graph-theory tournament
1个回答
0
投票

有多少场比赛?

n 个顶点上未标记锦标赛的数量由 OEIS 中的序列 A000568 给出,但没有简单的公式。 (n 个分区有一个总和...)”

OEIS 链接给出了一个公式(n 个分区的总和),以及该公式在多种编程语言(包括 Maple 和 Mathematica)中的实现。

如果你想在Python中实现这个公式,我建议使用库sympy来获取n的分区。

© www.soinside.com 2019 - 2024. All rights reserved.