让我们考虑一个由 n 支球队组成的联盟,其中每支球队对阵所有其他球队两次,结果是三种可能的结果:赢,输或平。一场胜利需要2分,平局1分,亏损0分。我们想确定一个联赛表是否可以接受。
我正在尝试实现多项式时间算法来解决此问题。我曾考虑过使用网络流技术(如Kleinberg&Tardos的“算法设计”的第7章中所述),但没有提出任何具体的建议。
理想的解决方案应该是这样
IsAdmissible
Input: Final league table
{
...
}
Output: TRUE if there's a combination of matches resulting in given table
FALSE otherwise
答案 0 :(得分:0)
答案 1 :(得分:0)
快速的初步检查:所有团队的分数总和必须满足:
每支球队出战38场比赛,每场比赛可以得分0、1或3分。 每个团队的总分s必须满足:
很容易找到每个团队的所有有效(d,w)。
如果每个团队都有有效的(d,w),则该表是可接受的,例如:
对于任意2支球队,总和(w)≤38 + 36
对于任何3组,总和(w)≤38 + 36 + 34
对于任何n支球队,总和(w)≤38 + 36 + ... +(40-2n)
(按得分递减的顺序对球队进行排序;对每个n进行一次检查就足够了)
上面的两个方程式来自以下事实:
所有这些条件都是必需的。我相信(但不确定)它们已经足够。