Supponi di dover estrarre N numeri, da 1 a N, SENZA RIPETIZIONE.
Ovviamente, NON PUOI estrerre piu' di N numeri
Un Generatore di Numeri Casuali, per SUA STESSA natura, GENERA numeri duplicati PERCHE' e' in grado di generare sequenze di LUNGHEZZA arbitraria.
Quindi, usare un GNC direttamente, non e' possibile.
Serve un meccanismo alernativo.
Ci sono 2 modi:
UNO:
ti tieni traccia dei numeri gia' usciti, quindi, ogni volta che generi un numero casuale, SE E' gia' uscito, lo scarto e ne generi uno nuovo.
Funziona ma diventa SEMPRE PIU' LENTO a mano a mano che generi i numeri.
DUE
PREPARI un vettore di N interi che vanno da 1 a N: [1,2,3,…,N]
per costruzione, ogni intero tra 1 e N e' presente un'UNICA volta
ora prendi il vettore e LO MESCOLI. E' ovvio che DOPO il mescolamento l'ordine degli interi e' CASUALE, ma allo stesso tempo, ogni intero continua ad essere presente UN'UNICA volta.
ora ritorni l'intero in posizione 1,2,…N del vettore mescolato
Et VOILA' che hai ottenuto una sequenza di interi da 1 a N SENZA RIPETIZIONE.
---
Come si mescola un vettore?
;-)