我需要制作体育赛事的时间表.
有30支球队.每支球队必须打8场比赛.这意味着每支球队都不可能再次参加所有其他球队的比赛,但我需要避免这两支球队相互竞争不止一次.
我的想法是生成所有可能的比赛(对于30支球队:) (30*29)/2 = 435 matches并从这个列表中选择120场比赛(每场比赛8场比赛:) 8 * 30 / 2 = 120 matches.
这是我很难过的地方:我怎样才能选择这120场比赛?我尝试了一些简单的解决方案(列表的第一个匹配,然后是最后一个,依此类推),但它们似乎不适用于30个团队.我还尝试生成所有可能的匹配组合并找到哪一个正在工作但是有30个团队,这是太多的计算时间.
是否有我可以实现的现有算法?
UPDATE
我需要制作的是一个简单的时间表,没有消除.每支球队都有8场比赛,就这样.在一天结束时,将不会有一个赢家.
每个团队都会有他的日程安排,这个日程安排不会改变他们的输赢.规划是一整天完成的,是不可改变的.
更新2
起初,我不想对我的问题设置太多限制,但似乎没有任何限制(除了每个团队不会相互竞争多次),这只是随机选择每个8个匹配的问题球队.
所以这里有更多细节:
在这项体育赛事期间,有6种不同的运动(足球,手球,篮球等).这意味着有6个同时匹配.每15分钟开始一轮新一轮比赛.
每支球队必须参加8场比赛,每项运动至少一次.
这6项运动分别在三个不同的地方进行.这意味着在白天,每个团队都必须从一个地方搬到另一个地方.应尽可能减少这些举措.
一支球队不能连续打两场比赛.
您可以查看一些已知的匹配方法:
例如瑞士国际象棋系统
编辑:
在再次阅读您的要求之后 - 每个团队应该只为其他团队打一次,并且不一定要确定胜利者.看起来单个Round Robin系统可以做你想要的.你可以放弃任何超出你需要的8的额外比赛.
您确定无法获得 32 支球队吗:-)?
这会让事情变得更简单——有一个标准的锦标赛结构,但让每轮的失败者在自己的图表中比赛。我认为这可以最大化在赛事期间赢得至少一场比赛的球队数量。
在 30 支球队中,您可以让 2 支球队进行一场“友谊赛”,并在第一轮中获胜。但组织变得更加复杂。