Esta questão é em relação ao algoritmo Fisher-Yates para retornar um shuffle aleatório de uma determinada matriz. A página da Wikipedia diz que sua complexidade é O (n), mas acho que é O (n log n).
Em cada iteração i, um número inteiro aleatório é escolhido entre 1 e i. Simplesmente escrever o número inteiro na memória é O (log i) e, como não há iterações, o total é
O (log 1) + O (log 2) + ... + O (log n) = O (n log n)
o que não é melhor do que o algoritmo ingênuo. Estou faltando alguma coisa aqui?
Nota: O algoritmo ingênuo é atribuir a cada elemento um número aleatório no intervalo (0,1) e, em seguida, classificar a matriz em relação aos números atribuídos.