0

我正在尝试用Java编写一个算法来计算板球比赛中击球手的最佳顺序,基于他们在每个顺序中的经验。

我有一个包含 11 个列表的列表。11 个名单中的每一个都包含球队中的所有 11 名击球手,按他们在这个位置上的比赛次数排名。

所以第一个列表会从在第一位置上玩最多游戏的玩家开始,到在第一位置玩最少游戏的玩家结束。第二个列表从在第二位置上玩最多游戏的玩家开始,到在第二位置玩最少游戏的玩家结束。ETC..

我想要做的是找到击球手的组合,每个列表中一个,这样可以最大限度地减少列表中球员位置的总和。如果所有玩家都只玩过一场游戏,那么这很容易,每个列表的顶级玩家。然而,有些玩家在多个榜单上名列前茅,而其他玩家可能不在任何榜单上。

我意识到这可能需要很多循环,计算这个最有效的方法是什么?如果您需要更多信息,请询问..对不起,这有点令人困惑......

这会是11吗!组合?啊啊啊啊啊

4

1 回答 1

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);
        }
    }
}
于 2013-02-15T16:28:00.407 回答