Comment générer une permutation aléatoire en Java?
Quelle est la meilleure façon de générer une permutation aléatoire de n nombres?
par exemple, disons que j'ai un ensemble de nombres 1, 2 et 3 (n = 3)
ensemble de toutes les permutations possibles: {123, 132, 213, 231, 312, 321}
Maintenant, comment puis-je générer:
- l'un des éléments ci-dessus définit (choisis au hasard)
- un ensemble complet de permutations comme indiqué ci-dessus
En d'autres mots, si j'ai un tableau de n éléments, comment faire Je shuffle au hasard? S'il vous plaît aider. Grâce.
3 réponses
java.util.Collections.shuffle(List);
javadoc lien Collections.shuffle
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
java.util.Collections.shuffle(list);
Il est intéressant de noter qu'il existe beaucoup d'algorithmes que vous pouvez utiliser. Voici comment il est mis en œuvre dans le Sun JDK:
public static void shuffle(List<?> list, Random rnd) {
int size = list.size();
if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
} else {
Object arr[] = list.toArray();
// Shuffle array
for (int i=size; i>1; i--)
swap(arr, i-1, rnd.nextInt(i));
// Dump array back into list
ListIterator it = list.listIterator();
for (int i=0; i<arr.length; i++) {
it.next();
it.set(arr[i]);
}
}
}
Vous pouvez essayer RubyCollect4J
Ruby.Array.of(1, 2, 3).permutation().toA().sample();
Il a fait exactement ce que vous avez demandé. BTW, je suis l'auteur de cette bibliothèque Java.
vous posez des questions sur un générateur de permutation? Parce que ton jeu de permutation manque deux nombres. De toute façon, vous pouvez regarder le générateur de permutations sur http://www.merriampark.com/perm.htm