我正在尝试为体育联盟创建一个调度程序,我想将球队安排在小组中,这样每支球队每组都有一场比赛。我认为我正在尝试做的事情是计算机科学中存在的一个问题,但我不知道它叫什么,而且我很难找到有关它的信息。无论哪种方式,情况如下:
假设我有一组团队A = {1,2,3,...,n}
和一组对这些团队B = {(1,2), (1,3), (2,4), (6,9),...}
。B 没有来自 A 的所有可能的团队组合。假设 A 有偶数个团队。我的程序正在尝试创建 B 的一个子集(让我们称之为子集 S),这样来自 A 的每个团队都恰好出现在 S 中一次。它通过将配对从 B 移动到 S 来做到这一点,一次一个。假设它已经在 S 中放置了几对,我如何确定在当前情况下是否可以成功创建 S?
例子:
A = {1,2,3,4}, B = {(1,2), (1,3), (1,4), (3,4)}
If after one move, S = {(1,2)}, then it can be completed by moving (3,4).
If after one move, S = {(1,3)}, then it cannot be completed.
更新: 这个算法将是我在日程生成器中使用的启发式算法之一。目标是将时间表隐含地分成“波”,每个团队每波有一场比赛。假设我有 16 支球队,每支球队将与球队中的其他球队进行 5 场比赛。一个理想的时间表将确保在每支球队至少有一场比赛之前没有球队有他们的第二场比赛。调度程序一次选择一个游戏并为它们分配一个日期。因此,我们的想法是让调度程序跟踪在此“波”中安排的比赛,并且永远不要选择会阻止每个团队在当前波中只打一次的比赛。调度程序还使用了许多其他启发式方法,因此我无法明确排序游戏并使其按顺序进行。
如果这不清楚或不是很严格,我很抱歉。随时要求澄清,我会尽力进一步解释。