Triedenie
Triedenie a jeho zložitost’
Rastislav Krivoš-Belluš
Ústav informatikyPrírodovedecká fakulta
Univerzita Pavla Jozefa Šafárika, Košice
Popoludnia s informatikou
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie
Triedenieproces preusporiadania danej množiny (pol’a prvkov)podl’a urcitej reláciejedna z najcastejšie sa vyskytujúcich operácií prispracovaní údajovvel’mi prepracovaná problematika, základy položil DonaldE. Knuth (1978)2004 LibrarySort
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Zložitost’
Zložitost’O notácia, dôležitá je asymptotická zložitost’ (pripolynomiálnych riešeniach je to stupen polynómu)v najhoršom prípade, v priemerepocet porovnanípocet presunov (zápisov do pamäte)
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie výberom
Triedenie výberomnajmenší prvok prvok môžeme zaradit’ priamo na zaciatoktriedeného pol’anajmenší prvok zo zvyšku pol’a zase na jeho zaciatok, ...príklad:12 5 4 7 8 2 5 72 5 4 7 8 12 5 72 4 5 7 8 12 5 7...
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie výberom
Selection Sortfor i := 1 to n-1 do beginmin := pole[i]; min_ind := i;for j := i+1 to n doif pole[j] < min then beginmin := pole[j];min_ind := j;
end;if (i <> min_ind) then beginpom := pole[i];pole[i] := pole[min_ind];pole[min_ind] := pom;
end;end;
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie výberom
Triedenie výberom - zložitost’pocet porovnaní O(n2)
optimálny pocet zápisov O(n)
výhodné, ak je zápis nárocná operácia
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Bublinkové triedenie
Bublinkové triedeniepriama výmena dvoch susedných prvkov (ktoré súv nesprávnom poradí) množiny v zmysle zadanej relácieopakovaný prechod cez pole, pri každom prechode jed’alšie najväcšie císlo na správnej pozícii (prebuble cezpole)príklad:12 5 4 7 8 2 5 75 12 4 7 8 2 5 75 4 12 7 8 2 5 7...5 4 7 8 2 5 7 12
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Bublinkové triedenie
Bubble Sortfor i := 1 to n-1 do beginfor j := 1 to n-i doif pole[j] > pole[j+1] then beginpom := pole[j];pole[j] := pole[j+1];pole[j+1] := pom;
end;end;
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Bublinkové triedenie
Bublinkové triedenie - zložitost’pocet porovnávaní aj pocet výmen O(n2)
vylepšenie - ukoncit’, ak pri prechode nenastala žiadnavýmena
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie vkladaním
Triedenie vkladanímvložit’ daný prvok do usporiadanej postupnosti tak, ževýsledná postupnost’ je znovu zotriedenápríklad:12 5 4 7 8 2 5 75 12 4 7 8 2 5 74 5 12 7 8 2 5 74 5 7 12 8 2 5 7...
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie vkladaním
Insert Sortfor i := 2 to n do beginj := i-1; pom := pole[i];while (j >= 1) and (pole[j] > pom) do beginpole[j+1] := pole[j];Dec(j);
end;pole[j+1] := pom;
end;
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie vkladaním
Triedenie vkladaním - zložitost’O(n2) porovnaní, zápisovnajhorší prípad - opacne utriedená postupnost’vylepšenie - binárne vyhl’adávanie v už utriedenejpostupnosti
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Shellovo triedenie
Shellovo triedenietriedenie prvkov vkladaním po skupinách so zmenšovanímkroku1959 Shell - postupnost’ krokov mocniny dvojkypríklad (zmenšovanie kroku o polovicu):4: 12 5 4 7 8 2 5 7 → 8 2 4 7 12 5 5 72: 8 2 4 7 12 5 5 7 → 4 2 5 5 8 7 12 71: 4 2 5 5 8 7 12 7 → 2 4 5 5 7 7 8 12
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Shellovo triedenie
Shell Sortkrok := n div 2;while (krok > 0) do beginfor i := krok+1 to n do beginj := i; pom := pole[i];while (j > krok) and (pole[j-krok] > pom)do beginpole[j] := pole[j-krok];Dec(j, krok);
end;pole[j] := pom;
end;krok := krok div 2;
end;
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Shellovo triedenie
Shellovo triedenie - zložitost’závislá od vol’by krokovO(n2) pre postupnost’ 1, 2, 4, 8, ..., n
4 , n2
O(n32 ) pre postupnost’
1, 4, 13, 40, 121, 364, 1093, ..., h, 3 ∗ h + 1, ... aj Hibbardovekroky 1, 3, 7, 15, 31, 63, ..., 2i − 1
O(n43 ) pre Sedgewickove kroky 9.4i − 9.2i + 1,
4i+1 + 3.2i + 1O(n.log2n) pre trojuholníkové kroky1, 2, 3, 4, 6, 9, 8, 12, 18, 27, ...
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Rýchle triedenie
Rýchle triedenie1960 C.A.R.Hoarezacína z oboch koncov pol’a a koncí, ked’ sa indexy stretnúmetóda rozdel’uj a panujvyberie pivota a rozdeli na dve skupiny - menšie a väcšieod nehopríklad:12 5 4 7 8 2 5 77 5 4 7 8 2 5 127 5 4 7 2 5 8 12
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Rýchle triedenie
Quick Sortprocedure sort(l, r: Word);i := l; j := r; pivot := pole[(l+r) div 2];repeatwhile (pole[i] < pivot) do Inc(i);while (pivot < pole[j]) do Dec(j);if (i <= j) then beginVymen(pole[i], pole[j]);Inc(i); Dec(j);
end;until (i > j);if (l < j) then sort(l, j);if (i < r) then sort(i, r);
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Rýchle triedenie
Rýchle triedenie - zložitost’najhoršia zložitost’ O(n2), pre už utriedené pole (ak pivot jepravý okraj)priemerná zložitost’ O(n.logn)
vylepšenia - náhodný výber pivota, medián z 3 prvkov(krajné hodnoty a stred), pre malé n (n < 10) nevolat’rekurzívne, ale použit’ triedenie vkladanímvýhody - paralelizmus, dobrá optimalizovatel’nost’ kódu
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie haldou
Triedenie haldoustromové triedenie (pomocou binárneho stromu), založenéna opakujúcom sa výbere najväcšieho prvku zo všetkých nprvkov, potom n − 1 prvkov atd’.pre každý vrchol platí, že hodnota v nom uložená nie jemenšia ako hodnota jeho synovvloženie prvku do haldy (procedúra Halda)
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie haldou - tvorba haldy
Príklad - tvorba haldy:12 5 4 7 8 2 5 712 5 4 7 8 2 5 712 5 5 7 8 2 4 712 8 5 7 5 2 4 7
Príklad - triedenie:12 8 5 7 5 2 4 7 → 8 7 5 7 5 2 4 128 7 5 7 5 2 4 127 7 5 4 5 2 8 127 5 5 4 2 7 8 125 4 5 2 7 7 8 125 4 2 5 7 7 8 12 ...
128 5
7 5 2 47
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie haldou - tvorba haldy
Heap Sort - mainprocedure Halda(l, r: Word);i := l;while (2*i <= r) do begint := 2*i; max := pole[t];if (2*i+1 <= r) and (pole[2*i+1] > max)then begint := 2*i+1; max := pole[t];
end;if (max > pole[i]) then beginpole[t] := pole[i]; pole[i] := max;
end;i := t;
end;
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie haldou
Heap Sort - mainfor i := n div 2 downto 1 do Halda(i, n);for j := 1 to n-1 do beginpom := pole[1];pole[1] := pole[n-j+1];pole[n-j+1]:=pom;Halda(pole, 1, n-j);
end;
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Triedenie haldou
Triedenie haldou - zložitost’vždy O(n.logn)
porovnanie s Rýchlym triedením: menšie nároky napamät’, ale v praxi väcšinou trvá dlhšie
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
TriedenieÚvodElementárne metódyVlastnosti triedenia
Vlastnosti triedenia
triedenie pol’a (náhodný prístup k celému pol’u), súboru(väcší ako pamät’)triedenie na mieste (in-place), ak spotrebujú O(logn)pamätestabilita - stabilné (BubbleSort) zachovávajú poradieprvkov s rovnakou hodnotou, nestabilné (QuickSort,HeapSort, ShellSort)porovnávacie (porovnáva celé hodnoty, kl’úce) a radixové(porovnáva bity kl’úcov)vkladaním (InsertSort, ShellSort), výberom (SelectionSort,HeapSort), výmenou (BubbleSort), rozdel’ovaním(QuickSort), spájaním (MergeSort)
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’
Bibliography
Na d’alšie cítanie
Robert SedgewickAlgoritmy v CAddison-Wesley, SoftPress 2003
Wikipediawikipedia.org
Rastislav Krivoš-Belluš Triedenie a jeho zložitost’