可能重复:Help Me Figure Out A Random Scheduling Algorithm using Python and PostgreSQL
假设你有9支球队的分区,你希望他们分别打16场比赛。通常你会想要8场比赛(主场)和8场比赛(观众)。是否有一个已知的算法进入并随机分配匹配?
注意 - >它有时可能不起作用,所以你可以有不均匀的数字。 任何帮助表示赞赏。
答案 0 :(得分:3)
请参阅这些permutation算法
这个适用于你:Fisher–Yates shuffle
答案 1 :(得分:0)
有一种很简单的方法可以生成循环here。在第二轮中,您可以重复循环并添加交换回家。
如果你有一支奇数队伍,你只需要使用一个虚拟团队,让对手在一个特定的回合中再见,这会产生一个额外的回合。如果您更愿意提供双标题,那么您可以在其他轮次中分配额外的一轮。
答案 2 :(得分:0)
我认为你可以在二分图算法中使用最大匹配(例如,参见here),它在多项式时间内运行。
我们通过在“离开”的“home”子集和8个顶点(Ta1,...,Ta8)中分配每个团队T,8个顶点(Th1,...,Th8)来表示您的问题顶点的子集。
我们现在寻找“home”和“away”子集之间的最大匹配,使得匹配中的每个边(H,A)满足H在“home”子集中的属性,“A”在“离开”子集,H和A属于不同的团队。