Questa domanda riguarda l'algoritmo Fisher-Yates per restituire uno shuffle casuale di un dato array. La pagina di Wikipedia dice che la sua complessità è O (n), ma penso che sia O (n log n).
In ogni iterazione i, viene scelto un numero intero casuale tra 1 e i. Scrivere semplicemente il numero intero in memoria è O (log i), e poiché non ci sono iterazioni, il totale è
O (registro 1) + O (registro 2) + ... + O (registro n) = O (n registro n)
che non è meglio l'algoritmo ingenuo. Mi sto perdendo qualcosa qui?
Nota: l'algoritmo ingenuo consiste nell'assegnare a ciascun elemento un numero casuale nell'intervallo (0,1), quindi ordinare l'array in base ai numeri assegnati.