首页 > 解决方案 > PHP - 将团队均匀分布到数组中,这样就不会重复组合

问题描述

我有以下九支队伍参加一个活动:

array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I')

本次比赛每场比赛需要三支参赛队伍(即:A vs B vs C)。每支球队都需要和其他球队交手一次,而且只有一次。

对于上述九支球队,将有四轮比赛(每支球队每场比赛将与另外两支球队比赛,每支球队有八支球队比赛 - 8 / 2 = 4轮),总共四轮比赛共有十二场比赛(每轮有三场比赛,每场三支球队 - 4 轮 x 3 场比赛 = 12 场总比赛)。

我预期的输出格式是:

array('A', 'B', 'C')
array('D', 'E', 'F')
array('G', 'H', 'I')
etc...

以上将总共十二个数组。

您将如何将上述九支球队分布在十二个独立的阵列中(每个阵列代表一场比赛),以便每支球队与其他球队比赛一次且仅一次?

标签: phpalgorithmcombinationspermutationschedule

解决方案


这类问题属于设计理论。我认为在这种情况下,所谓的施泰纳系统 S(2,3,9)

123、456、789、147、258、369、159、267、348、168、249 和 357。

我从http://users.mct.open.ac.uk/mjg47/papers/IntroSteiner.pdf剪切和粘贴的地方,希望避免拼写错误。

(该理论是大量技巧和特殊情况的集合。我不知道总能找到答案并涵盖所有情况的通用算法)


推荐阅读