我试图创建一个体育联盟调度,我想安排团队组,以每队每获得一个小组赛选择对球队的。我认为我试图做的事情是计算机科学中存在的问题,但我不知道它叫什么,我无法找到有关它的信息。无论哪种方式,这里的情况:算法:从一组游戏
比方说,我有一组球队A = {1,2,3,...,n}
和一组对B = {(1,2), (1,3), (2,4), (6,9),...}
。 B没有来自A的所有可能的组合。假设A有偶数个团队。我的程序正在尝试创建B的子集(让我们调用子集S),这样A中的每个团队都只出现一次。它通过将对从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支球队与其他球队进行比赛。理想的赛程将确保在每支球队至少有一场比赛之前,没有任何球队有第二场比赛。调度程序每次选择一个游戏并为它们分配一个日期。因此,这个想法是让调度人员跟踪在这个“波动”中安排的比赛,并且决不会选择一个可以防止每个队伍在当前波动中只玩一次的游戏。调度程序还使用了其他一些启发式方法,所以我不能明确地排列游戏顺序。
对不起,如果这不清楚或不是非常严格。随意要求澄清,我会尽我所能进一步解释。
大概我对这个问题没有很好的理解,但是在你的例子中为什么(2,3)和(2,4)不包含在B中? – BlackBear
B并不一定有来自A的每一对可能的组合。我认为如果它确实有所有可能的组合,那么它总是有可能完成S. –
我无法真正理解你想要做什么。按照足球的说法,一个组是一组(通常是4个),他们将在所有可能的比赛中进行比赛(例如在世界杯的初始阶段),但你似乎在做别的事情......它可能会有助于描述你希望你的日程安排在更高级别而不是特定的AB和C的东西。 – hugomg