可能的Dup:Help Me Figure Out A Random Scheduling Algorithm using Python and PostgreSQL
假设你有一个有9支球队的分区,你想让他们每支球队打16场比赛。通常你会希望有8场比赛(主场)和8场比赛(访客)。有没有一种已知的算法可以随机进入并分配匹配?
注意->,它可以,有时不工作,所以你可以有偶数。任何帮助都是非常感谢的。
发布于 2010-09-02 23:31:56
查看这些permutation算法
这个对你有效吗:Fisher–Yates shuffle
发布于 2010-09-02 23:40:13
有一个很好的简单的方法来生成循环here。在第二轮中,您可以重复循环,并添加交换主场和客场。
如果你有一个奇数的团队,你只需要使用一个虚拟团队,在特定的一轮中与对手说再见,这会导致额外的一轮。你可以在其他回合中分配额外的回合,如果你宁愿给双头球而不是通过的话。
发布于 2010-09-02 23:51:13
我认为你可以使用二部图算法中的最大匹配来实现这一点(例如,参见here),它以多项式时间运行。
我们通过分配每个团队,T,8个顶点(Th1,...,Th8)在顶点的“主”子集和8个顶点(Ta1,...,Ta8)在顶点的“离开”子集来表示问题。
我们现在寻找“家”和“客场”子集之间的最大匹配,使得匹配中的每个边(H,A)满足这样的属性,即H在“家”子集中,"A“在”客场“子集中,并且H和A属于不同的团队。
https://stackoverflow.com/questions/3632026
复制