Algorithm 每天将X个团队分成3个团队的数学解决方案
我试图将X个队分成“比赛日”,每天3个队 对于15个团队,有不止一个解决方案 找到9-21队所有可能的赛程/比赛计划的最佳方法是什么? 团队计数11、14、17和20也会导致问题,因为总匹配数/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场可能的比赛。你的最后一周只有一场比赛,或者你可以用不同的方式组织比赛 如果您想写出匹配的组合,您可以通过迭代两次
团队可能组合/比赛的数量可以用数学描述为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!