¿Qué es la clasificación de sueño?


Mejor respuesta

La clasificación de sueño es un algoritmo de clasificación de bromas que se hizo popular en el tablero de 4chan / prog / [1]. El pseudocódigo para la ordenación del sueño es:

procedure printNumber(n)

sleep n seconds

print n

end

for arg in args

run printNumber(arg) in background

end

wait for all processes to finish

¡Ja, ja! Hilarante .

En otras palabras, lo que hace es que la ordenación del sueño genera un proceso para cada argumento. Cada proceso espera n segundos, luego imprime n, lo que significa que tarda 1 segundo en imprimir «1», 2 segundos en imprimir imprimir «2», 100 segundos para imprimir «100». Esto significa que, en su mayor parte, los números se imprimen en el orden de su tamaño, «ordenando» los argumentos.

La complejidad de este algoritmo en un mundo perfecto es O(max(args)), ya que tomará max(args) segundos imprimir el arg más grande. En realidad, la complejidad es O(n^2 + max(args)), porque el mantenimiento de varios procesos en segundo plano depende del sistema operativo para administrar el cambio de contexto y la priorización de los procesos, por lo que el algoritmo básicamente subcontrata la clasificación real a el kernel.

También tenga en cuenta que no hay garantías de que la salida de la clasificación sea realmente correcta, una característica que la mayoría de los otros algoritmos de clasificación no tienen.

[1] http://dis.4chan.org/read/prog/1295544154

Respuesta

Solo por diversión, hay implementación en Erlang

sort(L) ->

Parent = self(),

[ spawn\_link(fun() -> receive after X*10 -> Parent ! X end end) || X <- L ],

[ receive X -> X end || \_ <- L ].

Que se puede escribir muy bien como una expresión en el shell de Erlang también

[ receive X -> X end

|| \_ <- [ spawn\_link(fun() -> receive after X*10 -> P ! X end end)

|| P <- [self()], X <- L ] ].

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *