Come si realizza il mescolamento casuale di un array


Il metodo che sto per mostrarti è definito come "algoritmo per una permutazione casuale di un insieme finito", ideato da Ronald Fisher e Frank Yates, ed ottimizzato successivamente.
di Antonio Lamorgese


Il metodo che sto per mostrarti è definito come “algoritmo per una permutazione casuale di un insieme finito“, ideato da Ronald Fisher e Frank Yates, ed ottimizzato successivamente. Esistono molti algoritmi che eseguono compiti molto diffusi e di conseguenza già discussi e pensati da altri sviluppatori. Per lo scopo di questa guida, dovrai tenere sempre sotto traccia l’algoritmo riportato più avanti nell’articolo.

Il procedimento è semplice, alla riga 9 viene dichiarato e definito un array ordinato di elementi numerici da 1 a 10. Dalla riga 12 alla 18, tale array viene mescolato con elementi memorizzati in posizioni, elaborate in modo casuale, diverse da quelle definite alla riga 9.

Cioè alla riga 10 viene generato un numero casuale da 0 a (10–1), questo perchè in quasi tutti i linguaggi di programmazione C like, gli array iniziano dalla posizione 0 e non dalla 1, per cui un array di 10 elementi inizia alla posizione 0 e termina alla posizione 9.

Alla riga 16, il valore dell’array, processato di volta in volta dalla 0 alla 9, viene scambiato con il valore dell’array alla posizione casuale.

Dalla riga 21 alla 23, l’array viene stampato a video.

Il seguente è un esempio in Javascript, potrai copiare ed incollare il codice sottostante in un file, ad esempio “index.html”, ed eseguirlo tramite Chrome o qualsiasi altro browser, per cui non hai bisogno di un compilatore o di un interprete.

<html>
   <head>
      <title>Mischiare un Array in Javascript</title>
   </head>
   <body>
      <p>
         <script language="javascript" type="text/javascript">
            //array ordinato di valori
            var a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]; 
 
            // mescola array
            for(var k=0; k<a.length; k++) {
               posizioneCasuale = Math.floor(Math.random() * k); 
               // scambia a[k] con a[posizioneCasuale]
               tmp = a[k];
               a[k] = a[posizioneCasuale];
               a[posizioneCasuale] = tmp;
            }
 
            // stampa array disordinato randomicamente
            for (var i=0; i<a.length; i++) {
               document.write("Elemento " +i+ " = " +a[i]+ "<br />");
            }
         </script> 
      </p> 
   </body>
</html>
Come trattare i vettori in C

LEGGI ANCHE: Il miglior modo di fare pratica come sviluppatore web


Antonio Lamorgese


Desideri acquisire nuove competenze?

corsi.it

Seguire questo corso online ti offrirà
l'opportunità di acquisire nuove competenze e di
migliorare il tuo curriculum professionale.
Clicca qui per seguire le prime lezioni gratuite online

Corsi.it - Il portale Nr.1 al mondo di corsi online


Amministratore di rete e sviluppatore. Dopo anni di esperienza nel settore, ho ideato un sistema di gestione dati MYSQL in PHP senza scrivere una sola riga di codice. Scopri di più....