Python(足球比赛算法麻烦)

时间:2014-01-26 19:25:56

标签: python algorithm

我正在尝试为足球小组赛阶段编写算法。 例如:我在舞台上有4支队伍。

 teams = ['team1', 'team2', 'team3', 'team4']

然后我得到了所有独特的对

import itertools
team_pairs = list(itertools.combinations(teams, 2))

我的team_pairs是团队之间的唯一匹配

[('team1', 'team2'), ('team1', 'team3'), ('team1', 'team4'), ('team2', 'team3'), ('team2', 'team4'), ('team3', 'team4')]

现在。我怎么能创造所有轮次? 例如:

  • round1:('team1', 'team2') ('team3', 'team4')
  • round2:('team1', 'team3') ('team2', 'team4')
  • round2:('team1', 'team4') ('team2', 'team3')

以及如何为6支球队或7支球队做到这一点? 请帮忙!!!

我解释说不好:

我有11支球队。然后我把它们分成几组。 我有:

  • group1:['team1','team2','team3','team4']
  • group2:['team1','team2','team3','team4']
  • group3:['team1','team2','team3']

在每个小组中,小组必须与小组中的所有小组一起玩。 让我们成为一组,团队是:

teams = ['team1', 'team2', 'team3', 'team4']
胜利--3分 草案1点 松散 - 0分

他们不能同时扮演所有人。 他们正在玩3天。

* first day - team1 vs team2 and team3 vs team4
* second day - team1 vs team3 and team2 vs team4
* third day - team1 vs team4 and team2 vs team3

然后我可以总结点数。

但我实际上并不了解如何将我的小组(我的team_pairs)分成几天,以及哪支球队在哪一天比赛。

1 个答案:

答案 0 :(得分:2)

问题可以看作exact cover问题,可以像Algorithm X的数独游戏一样解决,其中网络上有Python implementations

需要涵盖的集合包括:

  • 每个团队和每个比赛日的组合
  • 每场比赛配对

对于四支球队来说是:

A1, A2, A3, B1, B2, B3, C1, C2, C3, D1, D2, D3, AB, AC, AD, BC, BD, CD

其中B3表示团队B3天播放,BD表示团队B扮演团队D

可用的子集都是匹配所有匹配日的匹配对,对于四个团队是:

AB1: A1, B1, AB
AB2: A2, B2, AB
AB3: A3, B3, AB
AC1: A1, C1, AC
...
CD3: C3, D3, CD

解决这个问题会产生很多可能的固定装置,基本上是球队和比赛日的排列。选择一个,按比赛日排序并播放。

如果团队数量奇数,则没有解决方案。添加一个空团队作为虚拟,不要播放其中一个边是虚拟的匹配。