popoludnia s informatikou - ics.upjs.skrkb/prg1/rkb_triedenie.pdf · triedenie Úvod elementárne...

25
Triedenie Triedenie a jeho zložitost’ Rastislav Krivoš-Belluš Ústav informatiky Prírodovedecká fakulta Univerzita Pavla Jozefa Šafárika, Košice Popoludnia s informatikou Rastislav Krivoš-Belluš Triedenie a jeho zložitost’

Upload: others

Post on 23-Feb-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - zložitost’

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’

Page 2: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 3: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 4: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 5: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 6: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 7: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 8: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 9: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 10: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 11: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 12: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 13: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 14: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 15: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 16: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 17: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 18: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 19: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 20: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 21: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 22: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 23: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 24: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’

Page 25: Popoludnia s informatikou - ics.upjs.skrkb/prg1/RKB_triedenie.pdf · Triedenie Úvod Elementárne metódy Vlastnosti triedenia Rýchle triedenie Rýchle triedenie - 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’