Mescolare gli elementi di un array con Arduino (array shuffle) - #178

preview_player
Показать описание
In questo video vedremo come mescolare gli elementi di un array con l'algoritmo di Fisher Yates. L'algoritmo equivale a estrarre delle palline da un cappello. Questa tecnica è nota anche con il nome di "shuffle" degli elementi di un array.

Sorgenti, schemi e slide:

Indice dei video:

Puoi scaricare gratuitamente i miei libri:

I sorgenti su github:
Рекомендации по теме
Комментарии
Автор

Grazie Paolo! Mi hai fatto venire una splendida idea, da inserire nel mio progetto (sintetizzatore audio con sequencer) che stò realizzando, farò una funzione appunto per mescolare a random una sequenza di note preregistrata su un array, una figata!!! :-D

ifaber
Автор

Chiedo scusa se mi sono perso una parte, intendevo:
2) Dopo i++ si può mettere:
osize--;
pins[p] = pins[osize];
eliminando tutto il codice che segue fino alla fine del setup.
Scusa la critica, Paolo, sei molto chiaro nelle spiegazioni.

claudiomuzzioli
Автор

Tempo fa ho affrontato questo tema e voglio farti notare due cose:
1 Trovo molto più elegante:
randomSeed(micros());
2 Dopo i++ si può mettere:
osize--;
pins[p] = [osize];
eliminando tutto il codice che segue fino alla fine del setup
In pratica copio l'ultimo elemento a posto di quello che ho scelto e il gioco è fatto, ottimo in caso di grandi elenchi.

claudiomuzzioli
Автор

Non sapevo che questo algoritmo si chiamasse Fisher Yates... né che avesse complessità O(n). Ne imparo una nuova ogni giorno :-)

luigimorelli
Автор

Ciao Paolo, quando hai tempo, mi daresti un'indizio perchè se faccio eseguire il codice sotto l'azione di un pulsante non funziona correttamente? Il codice l'ho inserito prima nel loop per poterlo fare eseguire da pulsante, poi l'ho inserito in una funzione che faccio richiamare dal pulsante, ma nulla, va tutto in tilt. Sapresti darmi un'indizio? Grazie mille

bartolo
Автор

A me ogni volta che reinizio la simulazione stampa sempre lo stesso ordine

lanternini
visit shbcf.ru