我正在尝试用Java编写一个算法,根据他们在每个订单中玩的经验来计算板球比赛中击球手的最佳顺序。
我有11个列表的列表。 11个列表中的每一个都包含团队中的所有11个击球手,按他们在这个位置上玩的游戏数量排名。
因此,第一个列表将从在第一个位置玩多数游戏的玩家开始,并以在第一个位置玩最少游戏的玩家结束。第二个列表以玩第二个位置玩多数游戏的玩家开始,并以玩第二个位置最少游戏的玩家结束。等。
我想要做的是找到击球手的组合,每个列表中有一个击球手,这样可以最大限度地减少球员在名单中的位置总和。如果所有玩家只玩过一个游戏,那么这将很容易,每个列表的顶级玩家。然而,有些玩家不止一个列表,而其他玩家可能不是最重要的。
我意识到这可能需要相当多的循环,最有效的计算方法是什么? 如果您需要更多信息,请询问......有点令人困惑......
这将是11!组合?哦gaaaaad
答案 0 :(得分:1)
Guava方法Collections2.permutations为你计算所有可能的排列(11!),所有循环,你只需要评估结果。
编辑:为了检查内存消耗,请运行以下测试(需要一些时间,但不应该出现OutOfMemoryError):
public class Perm {
public static void main(String[] args) {
List<String> list = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11");
Collection<List<String>> permutations = Collections2.permutations(list);
for (List<String> strings : permutations) {
String s = strings.toString();
System.out.println(s);
}
}
}