Sortiranje poređenjem

S Vikipedije, slobodne enciklopedije
Sortiranje skupa neobeleženih tegova pomoću težinske vage zahteva algoritam Sortiranja poređenjem.

Sortiranje poređenjem je jedan od algoritama sortiranja koji samo čita listu elemenata kroz jednu apstraktnu operaciju poređenja (često "manje ili jednako" operator ili trostruko poređenje) koji određuje koji od dva elementa treba prvi da se pojavi u krajnjoj sortiranoj listi. Jedini zahtev je to što operator poštuje dve osobine linearnog uređenja:

  1. ako ab i bc onda ac (tranzitivnost)
  2. za svako a i b, ili ab ili ba (trihotomija).

Ako je moguće da ab i ba; u ovom slučaju jedan ili drugi mogu doći prvi u sortiranu listu. U , u ovom slučaju ulazni redosled određuje sortirani redosled .

Metafora za razmišljanje o sortiranju poređenjem je da neko ima skup neobeleženih tegova i vagu (instrument). Cilj je da poređamo tegove po redu a bez ikakve informacije, osim toga što postavljamo dva tega na vagu i gledamo šta je teže (ili jednako).

Primeri[uredi | uredi izvor]

Kviksort sa listom brojeva. Horizontalne linije su pivot vrednosti.

Neki od najpoznatijih algoritama poređenja uključuju:

Ograničenja performansi i prednosti različitih tehnika sortiranja[uredi | uredi izvor]

Postoje osnovna ograničenja za performanse sortiranja poređenjem. Sortiranje poređenjem mora da ima prosečnu donju granicu Ω(n log n) operacija poređenja ,[1] što je poznato i kao linearitmičko vreme. Ovo je posledica ograničenja informacija dostupnih kroz sama poređenja — ili, da ga stavi drugačije, u neodređene algebarske strukture potpuno uređenih skupova. U ovom smislu, sortiranje spajanjem, hipsort, i introsort su asimptotički optimalni u smislu broja poređenja koje moraju da odrade, iako ovo metrički zanemaruje druge operacije. Sortiranja koja nemaju poređenja (kao što su primer ispod) mogu da dostignu O(n) performansu korišćenjem drugih operacija, dopuštajući im da zaobiđu ovu donju granicu (pod pretpostavkom da su elementi konstantne veličine).

Primetite da sortiranje poređenjem može bite brže na nekim listama; mnogo adaptivnih sortiranja kao što je sortiranje umetanjem radi u O(n) vremenu na već sortiranoj ili polu-sortiranoj listi. Ω(n log n) donja granica prihvata samo slučajeve u kojima ulazna lista može biti u bilo kom mogućem redosledu.

Takođe primtite da u stvarnom životu brzina sortiranja zavisi i od mogućnost nekih algoritama da optimalno koriste relativno brzu keš memoriju, ili aplikacija može imati koristi od metoda za sortiranje u kojoj sortiran podaci počinju da se pojavljuju korisniku brže (i onda korisnikova brzina čitanja će biti ograničen faktor) za razliku od metoda sortiranja gde nije dostupan izlaz za prikazivanje sve dok cela lista ne bude sortirana.

Uprkos ovim ograničenjima, sortiranje poređenjem nudi primetnu praktičnu prednost koja kontroliše funkciju poređenja dozvoljavajući sortiranje veoma različitih tipova podataka i dobru kontrolu na sortiranoj listi. Na primer, obrtanje rezultata funkcije poređenja dozvoljava listi da bude obrnuto sortirana; i jednom se može sortirati lista n-torki u leksikografskom poretku tako što pravimo funkciju poređenja koja poredi svaki deo u sekvenci:

function NtorkaPoredjenje((leviA, leviB, leviC), (desniA, desniB, desniC))
    if leviA ≠ desniA
        return compare(leviA, desniA)
    else if leviB ≠ desniB
        return compare(leviB, desniB)
    else
        return compare(leviC, desniC)

Balansirana ternarna notacija omogućava da poređenje bude u jednom koraku, a rezultati budu "manje", "veće" ili "jednako".

Sortiranje poređenjem se generalno prilagođava mnogo lakše kompleksnom poretku kao što je poredak u brojevima sa pokretnim zarezom. Takođe, kad se fukcija poređenja jedno napiše, bilo koje sortiranje poređenjem se može iskoristiti bez modifikacije; sortiranja bez poređenja obično zajtevaju posebne verzije za svaki tip podataka.

Ova fleksibilnost, zajedno sa efikasnošću gorenavedenog algoritma sortiranja poređenjem na savremenim računarima, dovela je do velikog korišćenja ovog algoritma u raznim oblastima.

Alternative[uredi | uredi izvor]

Neki problemi sortiranja zahtevaju isključivo brže rešenje nego Ω(n log n) granica za Sortiranje poređenjem; primer je celobrojno sortiranje, gde su svi ključevi celi brojevi. Kada ključevi čine mali raspon, Sortiranje prebrojavanjem je primer algoritma koji radi u lenearnom vremenu. Ostali celobrojni algoritmi sortiranja, kao što je radiks sortiranje, nisu asimptotički brži od sortiranja poređenjem, ali u praksi mogu biti brži.

Problem sortiranja parova po njihovom zbiru ne podleže Ω(n² log n) granici ili (kvadratu rezultata uparivanja); najbolji poznati algoritam i dalje ima O(n² log n) vremensku složenost, ali samo O(n²) poređenja.

Broj proređenja neophodnih za sortiranje liste[uredi | uredi izvor]

n Minimum
1 0 0
2 1 1
3 3 3
4 5 5
5 7 7
6 10 10
7 13 13
8 16 16
9 19 19
10 22 22
11 26 26
12 29 30[2]
13 33 34[3]
14 37 38[3]
15 41 42[4]
16 45 45 or 46[5]
19 57 58[4]
22 70 71[3]
n
10 22 19
100 525 521
1 000 8 530 8 524
10 000 118 459 118 451
100 000 1 516 705 1 516 695
1 000 000 18 488 885 18 488 874
Iznad: Poređenje donje granice sa stvarni minimumom broja poređenja (od OEISA036604) koji je neophodan za sortiranje liste od n elemenata. Ispod: Pomoću Stirlingove aproksimacije, ova donja granica je optimizovana sa .

Broj poređenja koji ovaj algoritam zahteva povećanje u proporciji sa , gde je broj elemenata za sortiranje. Ova granica je asimptotički mala.

Data je lista različitih brojea (možemo pretpostaviti, pošto nas zanima analiza najgoreg mogućeg slučaja), postoji n faktorijel permutacija, i tačno jedana od tih predstavlja sortiranu listu. Algoritam za sortiranje mora dobiti dovoljno informacija iz poređenja da identifikuje tačnu permutaciju. Ako se algoritam uvek završava posle f(n) koraka, ne može da razlikuje više od 2f(n) slučajeva zato što su ključevi različiti i svako poređenje ima samo dva moguća slučaja. Zato,

, ili ekvivalentno

Iz Stirlingove aproksimacije znamo da je . Ovo potvrđuje tvrdnju za donju granicu.

Identična gornja granica sledi iz algoritama koji dostiže ovu granicu u najgorem slučaju.

Navedeni argument omogućuje apsolutnu, a ne samo asimptotičku donju granicu broja poređenja, tj. poređenja. Ova donja granica je stvarno dobra (može se postići sa prostim algoritmom sortiranja spajanjem), ali je poznat da može biti netačan. Na primer, , ali najmanji broj poređenja za 13 elemenata je 34 (što je dokazano).[3][6]


Određivanje tačnog broja poređenja potrebnih za sortiranje datog broja prijava, je računski težak problem čak i za malo n, i nije poznata jednostavna formula za rešenje. Za neke od nekoliko konkretnih vrednosti koje su izračunate, vidi OEISA036604.

Donja granica za prosečan broj poređenja[uredi | uredi izvor]

Slična granica važi i za prosečan broja poređenja. Pod pretpostavkom da

  • su svi ključevi različiti, npr. svako poređenje će dati ili a>b ili a<b, i
  • ulaz je slučajna permutacija, izabrana jedinstveno iz skupa svih mogućih permutacija n elemenata,

ne moguće je odrediti u kom redosledu je ulaz manji od log2(n!) prosekom poređenja.

Ovo je najlakše primetiti pomoću koncepta teorije informacije. Entropija tako slučajne permutacije je log2(n!) bitova. Pošto poređenje može dati samo dva rešenja, najveća količina informacije koju proizvede je 1 bit. Zato, posle k poređenja preostala entropija poređenja, s obzirom na rezultate poređenja je bar log2(n!) - k bitova. Da bismo sortirali, neophodna je kompletna informacija, da bi preostala entropija bila 0. Iz toga sledi da k mora biti najmanje log2(n!).

Primetite da se ovo razlikuje od najgore slučaja koji je dat gore iznad, smislu da ne dozvoljava zaokruživanje na najbliži ceo broj. Na primer, za n = 3, najgori slučak gornje granice je 3, prosek za donju granicu je oko 2.58, dok je najveća donja granica za prosečne slučajeve oko 2.67.

U ovakvim slučajevima više elemenata može imati isti ključ, ne postoji očigledna statistička interpretacija za "prosečan slučaj", tako da argument poput ovog iznad ne može biti primenjen bez pravljenja određenih pretpostavki o raspodeli ključeva.

Reference[uredi | uredi izvor]

  1. ^ Cormen, Thomas H.; Leiserson, Charles E.; Rivest, Ronald L.; Stein, Clifford (2009) [1990]. Introduction to Algorithms (3rd izd.). MIT Press and McGraw-Hill. str. 191—193. ISBN 0-262-03384-4. 
  2. ^ M. Wells, Elements of Combinatorial Computing, Pergamon Press, Oxford, 1971.
  3. ^ a b v g Marcin Peczarski, New Results in Minimum-Comparison Sorting. Algorithmica 40(2):133-145, 2004.
  4. ^ a b Cheng Weiyi, Liu Xiaoguang, Wang Gang et al. The results of S(15) and S(19) to minimum-comparison sorting problem. Journal of Frontiers of Computer Science and Technology, 2007, 1(3): 305-313.
  5. ^ Peczarski, Marcin (3. 8. 2011). „Towards Optimal Sorting of 16 Elements”. arXiv:1108.0866Slobodan pristup. 
  6. ^ Peczarski, Marcin (2007). „The Ford–Johnson algorithm still unbeaten for less than 47 elements”. Information Processing Letters. 101 (3): 126—128. doi:10.1016/j.ipl.2006.09.001. 

Literatura[uredi | uredi izvor]