假设我有3 teams
,每个团队都在group of 8
个团队中,我需要决定哪个团队在该群组中position
。{/ p>
team 1
上的position 1
和team 2
上的position 1
组合0 faults
,
但team 1
上的position 1
和team 2
上的position 2
的组合会产生fault of 2
现在我需要根据他们的缺点找到最佳位置。如果它只适用于2个团队,这很容易。但是当它是X队的时候会变得更难。接下来可能有已经填写在组中的位置,因此这些位置不能相互比较。
为简单起见,我只为一组4号和8号小组添加了一个小例子,但是大小从2到8不等的组
对于所有这些群组,我有+ - 架构,我也计算了它们的错误......
因此,对于下面这个例子,我可以将所有球队放在第1位 但是当其中一个小组中的位置1已经被占用时,它会得到另一个故事。
我需要找到具有最少故障的最佳选择
这些群组看起来像这样......其中null是空位
8号小组
4号组
故障计算
当开启位置X == +且位置Y == - 或反之亦然时,我们计算错误 如果我们找到某些位置的+ == +或 - == - 则没有错误
foreach (var teamAvailableLineNumberA in teamAvailableLineNumbers) {
foreach (var availableLineNumberA in teamAvailableLineNumberA.Value) {
foreach (var teamAvailableLineNumberB in teamAvailableLineNumbers) {
if (teamAvailableLineNumberA.Key == teamAvailableLineNumberB.Key) { continue; } //Dont process yourself
foreach (var availableLineNumberB in teamAvailableLineNumberB.Value) {
var teamA = teamAvailableLineNumberA.Key;
var teamB = teamAvailableLineNumberB.Key;
var pmSchema = APlusMinusSchemas.Single(pm => pm.DrawSize == teamA.Group.GroupSize);
var complementartyLine =pmSchema.LineNumbers[availableLineNumberA].ComplementaryLines.Single(cl => cl.DrawSize == teamB.Group.GroupSize && cl.LineNumber == availableLineNumberB);
if (complementartyLine != null) {
listOfComplementaryLinesByTeamCombination.Add(new Tuple<Team, Team, int, int, int>(teamA,teamB,availableLineNumberA, availableLineNumberB, complementartyLine.NumberOfFaultsHomeHome));
}
}
}
}
}
teamAvailableLineNumbers = Dictionary<Team, List<int>>
其中List<int>
是其所在群组的可用位置。
如何创建一个算法/数据结构,可以为未知数量的可用位置数量不足的团队计算并保存此类信息?
我希望有人能帮助我。