randomCommencer avec random


Remarques

Cette section fournit une vue d'ensemble de ce qu'est le hasard et de la raison pour laquelle un développeur peut vouloir l'utiliser.

Il devrait également mentionner tous les grands sujets au hasard et établir un lien avec les sujets connexes. La documentation de random étant nouvelle, vous devrez peut-être créer des versions initiales de ces rubriques connexes.

Fisher-Yates mélange

Aussi connu sous le nom de Knuth Shuffle et le mélange de Durstenfeld-Fisher-Yates. Ce mélange prend un tableau de n éléments et le mélange. L'algorithme est vraiment aléatoire en ce sens que, après le brassage, chaque permutation du tableau est également probable.

En java:

public static void shuffle(E[] deck) {

    //From the end, swap each card with a random card from the unswapped portion.
    for(int i = deck.length - 1; i > 0; i--)
    {
        //Pick an element from [0,i], inclusive.
        int chosenCard = (int) (Math.random() * (i + 1));

        E temp = deck[i];
        deck[i] = deck[chosenCard];
        deck[chosenCard] = temp;
    }
}
 

Remarque: il est nécessaire que l'élément de remplacement vienne de [0, i] inclus et non de [0, i) exclusif: sinon, les permutations du tableau où les éléments restent en place sont impossibles, ce qui n'est pas vraiment aléatoire.

En supposant que des nombres aléatoires prennent O (1) pour générer, l'algorithme fonctionne en place et prend O (n) temps et espace. Un tableau mélangé de cette manière peut être utilisé pour récupérer des éléments non répétitifs dans O (1) temps amorti par élément.

E[] deck;
int drawIndex;

//Elements are taken from an index that advances.
public E drawUniqueCard()
{
    //Once all cards have been drawn, reshuffle the deck and draw from the top.
    if(drawIndex == deck.length)
    {
        shuffle(deck);
        drawIndex = 0;
    }
    //Pull the next card off the deck.
    return deck[drawIndex++];
}
 

Installation ou configuration

Instructions détaillées sur la configuration ou l'installation aléatoire.