Adaptivno sortiranje

Из Википедије, слободне енциклопедије

Algoritam za sortiranje spada u grupu adaptivnih sortova ako koristi prednost da već postoji neki poredak u ulazu. Adaptivno sortiranje se uglavnom vrši izmenom postojećih algoritama za sortiranje.

Motivacija[уреди]

Algoritmi koji su zasnovani na poredjenjima imaju dužnost da postignu vremensku složenost O(n). Adaptivno sortiranje ima prednost u tome sto već postoji red u ulazu, tako da može da postigne i bolju složenost. Prema tome vreme za sortiranje je funkcija koja polako raste sa povećanjem niza i "nereda" u njemu. Drugim rečima-što je niz više sortiran pri unosu, to je algoritam brži.

Ovo je zanimljiv algoritam jer se nizovi koji su već uređeni često sreću u praksi. Učinak postojećih algoritama za sortiranje može biti dokazan uzimajući u obzir presortiranost niza.

Primetite da većina algoritama koji imaju najbolju vremensku složenost procenjenu na najgorem slučaju, posebno hipsort i mergesort, ne uzimaju u obzir prethodnu uređenost ulaznog niza, iako je ovaj nedostatak lako primetiti, naročito kod mergesort-a proverom da li je levi element manji ili jednak od prvog desnog. U tom slučaju mergesort može biti zamenjen jednostavnom konkatenacijom- modifikacijom koja je dobra u slučaju pravljenja prilagodljivog sortiranja.

Primeri[уреди]

Klasičan primer adaptivnog sortiranja je sortiranje umetanjem. U ovom algoritmu prolazimo kroz niz s leva na desno i tražimo poziciju za trenutni element i umećemo ga u prethodno sortirani niz. Pseudokod ovog algoritma izgleda ovako:

 procedure Straight Insertion Sort (X, n):
 X[0] := − ∞;
 for j := 2 to n do
 begin i := j − 1;
      t := X[j];
      while t < X[i] do
      begin X[i + 1] := X[i];
            i := i - 1
      end;
      X[i + 1] := t;
 end;

Performanse ovog algoritma mogu biti opisane brojem inverzija ulaza. Onda će T(n) biti I(A)+ (n-1), gde je I(A) broj inverzija. Koristeći ove mere preuređenosti-koje su u vezi sa brojem inverzija-sortiranje umetanjem brže sortira uređeni niz. Drugi primeri adaptivnog sortiranja su prilagodljivo hip sortiranje i adaptivno sortiranje spajanjem. Dijkstrin Smutsort je takođe varijacija hipsorta koja podrazumeva korišćenje algoritma adaprivnog sortiranja.

Timsort koji se koristi kao genetički algoritam za sortiranje za više programskih jezika, npr. Pajton, takođe je adaptivni.

Literatura[уреди]

Vidi još[уреди]