Algorithm 每天将X个团队分成3个团队的数学解决方案

Algorithm 每天将X个团队分成3个团队的数学解决方案,algorithm,sorting,math,mathematical-optimization,Algorithm,Sorting,Math,Mathematical Optimization,我试图将X个队分成“比赛日”,每天3个队 对于15个团队,有不止一个解决方案 找到9-21队所有可能的赛程/比赛计划的最佳方法是什么? 团队计数11、14、17和20也会导致问题,因为总匹配数/3=“必须是偶数/整数” 团队可能组合/比赛的数量可以用数学描述为a 例如,当有9支球队时,比赛数量为36场。 注意,当k或k-1可被3整除时,这个数字只能被3整除。有5支球队,你将有10场可能的比赛。你的最后一周只有一场比赛,或者你可以用不同的方式组织比赛 如果您想写出匹配的组合,您可以通过迭代两次

我试图将X个队分成“比赛日”,每天3个队

对于15个团队,有不止一个解决方案

找到9-21队所有可能的赛程/比赛计划的最佳方法是什么? 团队计数11、14、17和20也会导致问题,因为总匹配数/3=“必须是偶数/整数”


团队可能组合/比赛的数量可以用数学描述为a

例如,当有9支球队时,比赛数量为36场。

注意,当k或k-1可被3整除时,这个数字只能被3整除。有5支球队,你将有10场可能的比赛。你的最后一周只有一场比赛,或者你可以用不同的方式组织比赛

如果您想写出匹配的组合,您可以通过迭代两次团队数量来列出它们。下面是一些示例Java代码

公共类MyClass{
公共静态void main(字符串参数[]){
int TEAMS=10;//团队数量
整数组合=0;
对于(int i=1;i(Python),以下根据迄今为止玩得最少的球队选择接下来的三支球队每天分组,并为9支球队的情况提供了理想的解决方案:

来自itertools导入组合的

从字符串导入ascii_大写字母
团队数量=9
teams=ascii_大写字母[:TEAMCOUNT]#只需对团队使用大写字母即可
#都需要两队比赛
games={'。以组合(团队,2)的形式加入(两个团队)两个团队}
#所有可能的三队比赛日和他们所对应的两队比赛
三元组={x+y+z:{x+y,x+z,y+z}
对于组合中的x,y,z(团队,3)}
打印('团队:',团队)
n=0
而游戏和三人组:
#基于剩余游戏数的权重
权重={t:sum(游戏中的g代表g)团队中的t}
to_play={t1+t2:min([weight[t1],weight[t2]]),用于游戏中的t1,t2}
#选择下一个没打多少比赛的球队
_,选择三重=最大值((如果在游戏中为m,则在比赛中为m玩[m]),
日)
对于天,匹配项为三个。items()
n+=1
打印(f“日{n}:{selected_triple}游戏:”,
''.join(已排序(m表示三元组中的m[如果在游戏中为m则选择三元组]))
游戏-=三人组[选定的三人组]#进行这些游戏
del triples[选择三重]#今天使用三重
如果游戏:
打印(“在这些天之后,以下游戏仍将继续玩:”、“”。加入(已排序(游戏)))
其他:
打印(“所有已玩游戏!”)
9个团队的输出:

Teams: ABCDEFGHI
  Day1: GHI Games:  GH GI HI
  Day2: DEF Games:  DE DF EF
  Day3: ABC Games:  AB AC BC
  Day4: CFI Games:  CF CI FI
  Day5: BEH Games:  BE BH EH
  Day6: ADG Games:  AD AG DG
  Day7: CEG Games:  CE CG EG
  Day8: BDI Games:  BD BI DI
  Day9: AFH Games:  AF AH FH
  Day10: CDH Games:  CD CH DH
  Day11: BFG Games:  BF BG FG
  Day12: AEI Games:  AE AI EI
 All games played!

你想完成什么?例如,你如何判断一种方法是否优于另一种方法?谢谢你的时间。主要目标是尽量减少旅行。每天有3支球队参加,每支球队每天打2场比赛。因此,D1 T1是主机,T2+T3作为客人旅行到主机。你是在寻找代码解决方案还是仅仅是算法答案是什么?正在寻找一个解决方案来输入团队的数量并最终生成固定装置(代码)。但我还没有用数学方法解决它-因此,我从这个问题开始(如何在stackoverflow上捐款;)?我认为这是实现最小旅行的唯一可能的解决方案mm,您为9支球队编写的代码会留下游戏。我有代码,为9支球队编写的代码有12天的三场比赛,没有任何游戏没有剩余。很快就会到来…非常令人印象深刻。我错过了用三角数方法设计的。这一切都很好。此解决方案仅限于9场团队,对吗?与15个团队一起运行它并不接近最优。它不受限制。但它不会为15个团队提供最优解决方案
Teams: ABCDEFGHI
  Day1: GHI Games:  GH GI HI
  Day2: DEF Games:  DE DF EF
  Day3: ABC Games:  AB AC BC
  Day4: CFI Games:  CF CI FI
  Day5: BEH Games:  BE BH EH
  Day6: ADG Games:  AD AG DG
  Day7: CEG Games:  CE CG EG
  Day8: BDI Games:  BD BI DI
  Day9: AFH Games:  AF AH FH
  Day10: CDH Games:  CD CH DH
  Day11: BFG Games:  BF BG FG
  Day12: AEI Games:  AE AI EI
 All games played!