0

私はJavaでアルゴリズムを作成して、クリケットの試合でのバッツマンの最適な順番を、各順番での経験に基づいて計算しようとしています。

私は11のリストのリストを持っています。11のリストのそれぞれには、チーム内の11人のバッツマンがすべて含まれており、このポジションでプレイしたゲームの数でランク付けされています。

したがって、最初のリストは、最初の位置でほとんどのゲームをプレイしたプレーヤーで始まり、最初の位置で最も少ないゲームをプレイしたプレーヤーで終わります。2番目のリストは、2番目の位置でほとんどのゲームをプレイしたプレーヤーで始まり、2番目の位置で最も少ないゲームをプレイしたプレーヤーで終わります。等..

私がやりたいのは、各リストから1つずつ、バッツマンの組み合わせを見つけることです。これにより、リスト内のプレーヤーの位置の合計が最小化されます。すべてのプレーヤーが1つのゲームしかプレイしていない場合、これは簡単で、各リストのトッププレーヤーです。ただし、一部のプレーヤーは複数のリストを上回っていますが、他のプレーヤーは上回っていない場合があります。

これにはかなりの数のループが必要になる可能性があることに気付きましたが、これを計算する最も効率的な方法は何ですか?さらに情報が必要な場合は、お問い合わせください..申し訳ありませんが、少し混乱しています...

これは11になりますか?組み合わせ?ああgaaaaad

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 に答える