这个问题被要求在PHP中解决,但是任何语言的概念都可以解决。
这被要求具有可扩展性,即你可以在之后添加玩家,而你的算法仍然可以工作。
你总共有20名球员(可以添加更多)。每个人的技能等级分别为1-10。
你被要求为两个团队提供相同数量的人员,并且尽可能接近相同的技能水平。
按球员水平排序。计算技能水平的中值,使技能水平高于中值的玩家与技能水平低于中值的玩家数量相等。
找到下一个最近的玩家的技能水平。前两名被选中的球员,每队一名,是技术水平中位数的球员,以及下一个最接近的球员。
找出得分最接近前两名球员的下两名球员。交换这些球员,让他们加入球队。那就拿剩下的两个,不要交换。接下来的两个,交换一下。等等。
无论你有8个玩家还是108个玩家,算法都应该有效。再加上一些改动,它应该支持2支20人的队伍,或者100支20000人的队伍。
让我们创建一个示例。8名玩家,从A到H,技能等级0到9。所以玩家B7被命名为B,技能等级为7。你的可用球员有:
- A4
- B9
- C7
- D3
- E5
- F5 G1
- H8
按技能等级排序得到:
G1- D3
- A4
- E5
- F5
- C7
- H8
- B9
技能水平中位数为5。下一个最接近的技能水平也是5,所以前两个被选中的球员是E5到TeamOne和F5到TeamTwo。
接下来的两个玩家是A4和C7。交换它们。C7给TeamOne, A4给TeamTwo。
接下来的两个玩家是D3和H8。你交换了最后两个,所以不要交换这两个。D3归TeamOne, H8归TeamTwo。
接下来的两个参与者是G1和B9。你没有交换最后两个,所以交换这个。G1去TeamTwo, B9去TeamOne。
现在你有2支队伍,每支队伍有4名球员,他们的技术水平大致相同。
结果是:
TeamOne:
- E5
- C7
- D3
- B9
Average skill level is 6.
TeamTwo:
- F5
- A4
- H8
- G1
Average skill level is 5 (to the nearest whole skill level).
你必须与越多的球员一起工作,团队技术水平就会越接近。
实现这个的PHP代码应该相当容易编写。