Hvad er sleep sort?


Bedste svar

Sleep sort er en vitsorteringsalgoritme, der blev populær på 4chan-kortet / prog / [1]. Pseudokoden til søvn sortering er:

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

Med andre ord, hvad det gør er, at søvnsorter gyder en proces for hvert argument. Hver proces venter på n sekunder og udskriver derefter n, hvilket betyder, at det tager 1 sekund at udskrive “1”, 2 sekunder at udskrive ud “2”, 100 sekunder for at udskrive “100”. Dette betyder, at tallene for det meste udskrives i rækkefølgen af ​​deres størrelse og dermed “sorterer” argumenterne.

Kompleksiteten af ​​denne algoritme i en perfekt verden er O(max(args)), da det tager max(args) sekunder at udskrive den største arg. I virkeligheden er kompleksiteten O(n^2 + max(args)), fordi vedligeholdelse af flere baggrundsprocesser er afhængig af operativsystemet til at styre kontekstskift og prioritering af processerne, og algoritmen outsourcer grundlæggende den faktiske sortering til kernen.

Bemærk også, at der ikke er nogen garanti for, at outputen af ​​sorteringen faktisk er korrekt, en funktion, som de fleste andre sorteringsalgoritmer ikke har.

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

Svar

Bare for sjov er der implementering i Erlang

sort(L) ->

Parent = self(),

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

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

Som også kan skrives pænt som et udtryk i Erlang-skallen

[ receive X -> X end

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

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *