首页 > 解决方案 > Python算法生成一组球队,其中球员与其他给定球员的次数相同

问题描述

我正在寻找一个 python 程序,它以输入 n(玩家数量)为输入,并将它们分成两个大小相等的团队,持续时间为 w(周),这样每个玩家与任何其他给定玩家的数量相等时间。

例如,6 名球员在 4 周内生成 4 个球队配对 ((1,2,3)(4,5,6) , (1,3,5),(2,4,6) , (1,5,6) ,(2,3,4) , (1,4,6),(2,3,5)) 使得 1 与 2 尽可能相等,就像 1 与 5 或任何其他玩家对一样。

一队和二队之间没有区别,而且两队的人数总是相等的。

标签: pythonalgorithmcombinations

解决方案


基本上我所做的是使用一个名为itertools计算团队所有排列的库,并检查他们是否已经被选中。如果你有问题,就问吧。



list_of_players = ["Mark", "Willy", "Josh", "Rob"]
N = len(list_of_players)
good = []
all = []
for perm in list(permutations(list_of_players)):
    if sorted(perm[:N//2]) not in all and sorted(perm[N // 2:]) not in all:
        good.append(tuple([sorted(perm[:N // 2]), sorted(perm[N // 2:])]))
        all.append(sorted(perm[:N // 2]))
        all.append(sorted(perm[N // 2:]))

for i in range(len(good)):
    print("week:",i+1,good[i])

输出:

week: 1 (['Mark', 'Willy'], ['Josh', 'Rob'])
week: 2 (['Josh', 'Mark'], ['Rob', 'Willy'])
week: 3 (['Mark', 'Rob'], ['Josh', 'Willy'])

推荐阅读