Esta pregunta se refiere al algoritmo de Fisher-Yates para devolver una combinación aleatoria de una matriz determinada. La página de Wikipedia dice que su complejidad es O (n), pero creo que es O (n log n).
En cada iteración i, se elige un número entero aleatorio entre 1 e i. Simplemente escribir el número entero en la memoria es O (log i), y dado que hay n iteraciones, el total es
O (log 1) + O (log 2) + ... + O (log n) = O (n log n)
que no es mejor el algoritmo ingenuo. ¿Me estoy perdiendo de algo?
Nota: El algoritmo ingenuo es asignar a cada elemento un número aleatorio en el intervalo (0,1), luego ordenar la matriz con respecto a los números asignados.