Co je třídění spánku?


Nejlepší odpověď

Třídění spánku je algoritmus třídění vtipů, který se stal populárním na palubě 4chan / prog / [1]. Pseudokód pro třídění spánku je:

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! Veselý .

Jinými slovy, to, co dělá, je to, že třídění spánku způsobí pro každý argument jeden proces. Každý proces čeká n sekund, poté vytiskne n, což znamená, že vytištění „1“ trvá 1 sekundu, tisk 2 sekundy out „2“, 100 seconds to print out „100“. To znamená, že čísla jsou z větší části vytištěna v pořadí podle jejich velikosti, čímž se „třídí“ argumenty.

Složitost tohoto algoritmu v dokonalém světě je O(max(args)), protože vytištění největších arg bude trvat max(args) sekund. Ve skutečnosti je složitost O(n^2 + max(args)), protože udržování více procesů na pozadí závisí na operačním systému, který řídí přepínání kontextu a stanovení priorit procesů, a proto algoritmus v podstatě zadává skutečné třídění jádro.

Upozorňujeme, že neexistují žádné záruky, že výstup řazení je ve skutečnosti správný, což je vlastnost, kterou většina ostatních třídicích algoritmů nemá.

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

Odpověď

Pro zábavu je implementace v Erlangu

sort(L) ->

Parent = self(),

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

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

Které lze také pěkně napsat jako jeden výraz v prostředí Erlang

[ receive X -> X end

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

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *