Hva er sleep sort?


Beste svaret

Sleep sort er en vitsesorteringsalgoritme som ble populær på 4chan board / prog / [1]. Pseudokoden for søvnsortering 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! Morsom .

Med andre ord, hva det gjør er at søvnsorter gyter av en prosess for hvert argument. Hver prosess venter på n sekunder, og skriver deretter ut n, noe som betyr at det tar 1 sekund å skrive ut «1», 2 sekunder å skrive ut ut «2», 100 sekunder for å skrive ut «100». Dette betyr at tallene for det meste skrives ut i størrelsesorden, og dermed «sorterer» argumentene.

Kompleksiteten til denne algoritmen i en perfekt verden er O(max(args)), da det tar max(args) sekunder å skrive ut den største arg. I virkeligheten er kompleksiteten O(n^2 + max(args)), fordi å opprettholde flere bakgrunnsprosesser er avhengig av at operativsystemet styrer kontekstsvitsjing og prioritering av prosessene, og algoritmen legger derfor ut den faktiske sorteringen til kjernen.

Vær også oppmerksom på at det ikke er noen garanti for at utdataene til sorteringen faktisk er riktige, en funksjon som de fleste andre sorteringsalgoritmer ikke har.

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

Svar

Bare for moro skyld er det 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 pent som ett uttrykk i Erlang-skallet

[ receive X -> X end

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

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *