Wat is slaapsortering?


Beste antwoord

Slaapsortering is een algoritme voor het sorteren van grappen dat populair werd op het 4chan-bord / prog / [1]. De pseudocode voor slaapsortering is:

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! Hilarisch .

Met andere woorden, wat het doet, is dat slaapsortering één proces voor elk argument voortbrengt. Elk proces wacht n seconden en drukt vervolgens n af, wat betekent dat het 1 seconde duurt om “1” af te drukken, 2 seconden om af te drukken out “2”, 100 seconden om “100” af te drukken. Dit betekent dat de getallen voor het grootste deel worden afgedrukt in de volgorde van hun grootte, waardoor de argumenten worden “gesorteerd”.

De complexiteit van dit algoritme in een perfecte wereld is O(max(args)), aangezien het max(args) seconden duurt om de grootste arg af te drukken. In werkelijkheid is de complexiteit O(n^2 + max(args)), omdat het onderhouden van meerdere achtergrondprocessen afhankelijk is van het besturingssysteem om de contextomschakeling en prioritering van de processen te beheren, en daarom besteedt het algoritme in feite het daadwerkelijke sorteren uit aan de kernel.

Merk ook op dat er geen garanties zijn dat de uitvoer van de sortering werkelijk correct is, een functie die de meeste andere sorteeralgoritmen niet hebben.

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

Antwoord

Gewoon voor de lol, er is implementatie in Erlang

sort(L) ->

Parent = self(),

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

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

Wat ook mooi als een uitdrukking in de Erlang-shell kan worden geschreven

[ receive X -> X end

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

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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *