Co to jest sortowanie snu?


Najlepsza odpowiedź

Sortowanie snu to algorytm sortowania żartów, który stał się popularny na forum 4chan / prog / [1]. Pseudokod sortowania podczas snu to:

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

Ha-ha! Zabawne .

Innymi słowy, sortowanie uśpienia powoduje odrodzenie po jednym procesie dla każdego argumentu. Każdy proces czeka n sekund, a następnie wypisuje n, co oznacza, że ​​wydrukowanie „1” zajmuje 1 sekundę, a wydrukowanie 2 sekundy wydrukowanie „2”, 100 sekund na wydrukowanie „100”. Oznacza to, że w przeważającej części liczby są drukowane w kolejności ich rozmiaru, co powoduje „sortowanie” argumentów.

Złożoność tego algorytmu w idealnym świecie to O(max(args)), ponieważ wydrukowanie największego arg zajmie max(args) sekund. W rzeczywistości złożoność jest O(n^2 + max(args)), ponieważ obsługa wielu procesów w tle zależy od systemu operacyjnego do zarządzania przełączaniem kontekstu i nadawania priorytetów procesom, więc algorytm zasadniczo zleca sortowanie jądro.

Zauważ również, że nie ma gwarancji, że dane wyjściowe są rzeczywiście poprawne, funkcja, której nie ma większość innych algorytmów sortowania.

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

Odpowiedź

Dla zabawy, w Erlangu jest implementacja

sort(L) ->

Parent = self(),

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

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

Co można ładnie zapisać jako jedno wyrażenie również w powłoce Erlang

[ receive X -> X end

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

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

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *