比较Y个列表中的X个项目并为其提供资格

时间:2017-05-09 14:23:02

标签: c# algorithm list linq data-structures

假设我有3 teams,每个团队都在group of 8个团队中,我需要决定哪个团队在该群组中position。{/ p>

team 1上的position 1team 2上的position 1组合0 faults, 但team 1上的position 1team 2上的position 2的组合会产生fault of 2

现在我需要根据他们的缺点找到最佳位置。如果它只适用于2个团队,这很容易。但是当它是X队的时候会变得更难。接下来可能有已经填写在组中的位置,因此这些位置不能相互比较。

为简单起见,我只为一组4号和8号小组添加了一个小例子,但是大小从2到8不等的组

对于所有这些群组,我有+ - 架构,我也计算了它们的错误......

因此,对于下面这个例子,我可以将所有球队放在第1位 但是当其中一个小组中的位置1已经被占用时,它会得到另一个故事。

我需要找到具有最少故障的最佳选择

背景

enter image description here

这些群组看起来像这样......其中null是空位

用于计算故障的一些模式 enter image description here

8号小组

enter image description here

4号组

enter image description here

故障计算

当开启位置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>是其所在群组的可用位置。

如何创建一个算法/数据结构,可以为未知数量的可用位置数量不足的团队计算并保存此类信息?

我希望有人能帮助我。

0 个答案:

没有答案