Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort.

Rozměr: px
Začít zobrazení ze stránky:

Download "Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort."

Transkript

1 Třídící algoritmy. Insert Sort. Bubble Sort. Select Sort. Shell Sort. Quick Sort. Merge Sort. Heap Sort. Tomáš Bayer Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 1 / 66

2 Obsah přednášky 1 Vybrané třídící algoritmy a jejich dělení 2 Třídění přímým vkládáním 3 Třídění binárním vkládáním 4 Bublinkové třídění 5 Třídění přímým výběrem 6 Třídění se zmenšujícím se krokem 7 QuickSort 8 Třídění sléváním 9 Halda a třídění haldou 10 Přehled třídících algoritmů Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 2 / 66

3 1. Třídění: Vybrané třídící algoritmy a jejich dělení Postup, při kterém uspořádáváme vzestupně nebo sestupně prvky zadané posloupnosti X, X = {x 1,..., x n,n... počet prvků. Nejčastěji se jedná o posloupnost čísel, všechny prvky stejného datového typu. Vzestupné setřídění: Pro x i X x i x i+1,i 0, n 2. Sestupné setřídění: Pro x i X x i x i+1,i 0, n 2. Záměna vzestupného třídění za sestupné: prohození znaménka < za > v třídícím algoritmu. Důvod třídění: Snaha o uspořádání dat a zefektivnění operací s nimi. Nad setříděnými daty lze navíc provádět řadu operací efektivněji (tj. s nižší časovou i pamět ovou složitostí) než nad nesetříděnými daty, Tomáš např. Bayer vyhledávací bayertom@natur.cuni.cz algoritmy. (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 3 / 66

4 Vybrané třídící algoritmy a jejich dělení 2. Dělení třídících algoritmů: Dvě skupiny třídících algoritmů: vnitřní třídící algoritmy Prvky tříděné posloupnosti nacházejí uvnitř paměti počítače. K jednotlivým prvkům posloupnosti lze přistupovat v libovolném pořadí, Počet prvků n předem znám. vnější třídící algoritmy Data uložena na nějakém periferním zařízení. Počet prvků posloupnosti není znám předem, k prvkům lze přistupovat pouze sekvenčně. Rozsáhlá data, která se nevejdou do paměti počítače. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 4 / 66

5 Vybrané třídící algoritmy a jejich dělení 3. Efektivita třídících algoritmů: Kritéria efektivity třídících algoritmů: počet přesunů prvků nutný k setřídění posloupnosti, počet porovnání prvků nutný k setřídění posloupnosti. Náročnost kroků: Oba kroky mají různou náročnost. Přesun prvku je výpočetně náročnější než jeho porovnání s jiným prvkem (3 operace vs 1 operace). Minimalizace množství přesunů při třídění. Efektivnější provádět přesuny prvků na větší vzdálenosti: jeden posun o n prvků výhodnější než n posunů o 1 prvek. Časová složitost třídících algoritmů: Nejpomalejší algoritmy dosahují odhadu složitosti O(N 2 ), nejrychlejší O(N log N). Nižší složitosti při třídění nelze dosáhnout, neexistuje tedy algoritmus s Tomáš odhadem Bayer bayertom@natur.cuni.cz složitosti O(N). (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 5 / 66

6 Vybrané třídící algoritmy a jejich dělení 4. Přehled třídících algoritmů Existuje velmi mnoho třídících algoritmů. V praxi se používá pouze malé procento z nich, ostatní představují spíše akademický problém. Vybrané elementární třídící algoritmy (v praxi nepoužívané): Třídění přímým vkládáním (Insert Sort) Třídění binárním vkládáním (Insert Binary Sort) Bublinkové třídění (Bubble Sort) Třídění přímým výběrem (Select Sort) Třídění se zmenšujícím se krokem (Shell Sort) Vybrané profesionální třídící algoritmy: Quick Sort Třídění slučováním (Merge Sort) Třídění haldou (Heap Sort) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 6 / 66

7 Třídění přímým vkládáním 5. Třídění přímým vkládáním: Insert Sort. Vhodný pro částečně setříděné posloupnosti. Rychlejší než ostatní algoritmy s kvadratickou složitostí (Bubble Sort, Select Sort). Složitost O(N 2 ), počet přesunů C max = 0.5(n 2 + n 2), C min = 0.25(n 2 + 9n 10). Inspirován chováním hráče karet při jejich třídění. Hráč si vezme z balíčku karty a na základě jejich velikosti a barvy je zařazuje mezi ostatní karty. Karty má rozděleny na dvě podmnožiny: karty k setřídění a karty již setříděné. Z nesetříděné podmnožiny vezme první kartu a vloží ji na správné místo v setříděné podmnožině. Postup opakuje, dokud má k dispozici nějakou nesetříděnou kartu. Základem dalších algoritmů: Insert Binary Sort či Shell Sort. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 7 / 66

8 Třídění přímým vkládáním 6. Princip třídění přímým vkládáním: Dvě podmnožiny: podmnožina setříděných prvků S a podmnožina nesetříděných prvků N. Start: dim(s) = 0, dim(n) = n. Prvek x 0 v nesetříděné podmnožině ponecháme na stejné pozici Prvek x 1 porovnáme s prvkem x 0. Je -li x 1 > x 0, ponecháme prvky beze změny. V opačném případě zařadíme x 1 na první pozici a odsuneme x 0 o jednu pozici vpravo. Prvek x 2 porovnáme s prvky x 0, x 1. Zařadíme prvek na správnou pozici, prvek/prvky větší než x 2 odsuneme směrem doprava. Postup opakujeme, dokud nesetříděná část obsahuje alespoň jeden prvek. End: dim(s) = n, dim(n) = 0. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 8 / 66

9 Třídění přímým vkládáním 6. Porovnávání prvků Již setříděná posloupnost tvořena prvky {x 0,..., x i 1, Vkládaný prvek označen jako x i. Zatím nesetříděná posloupnost tvořena prvky {x i,..., x n 1. Prvek x i 1 představuje zarážku dělící posloupnost na dvě podmnožiny. Princip porovnávání: Prvek x i porovnáme s posledním setříděným prvkem x i 1. Pokud x i x i 1, prvek x i je na správné pozici. Inkrementujeme i = i + 1, opakujeme postup s následující dvojicí prvků. Pokud x i < x i 1, prohodíme prvky x i a x i 1. Prohozený prvek x i 1 porovnáme s předchozím prvkem x i 2. Pokud není splněna podmínka x i 1 x i 2, prohodíme prvky x i 1 a x i 2 Pokračujeme analogickým způsobem, dokud vkládaný prvek není na správné pozici konec. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 9 / 66

10 Třídění přímým vkládáním 7. Znázornění algoritmu Insert Sort Tomáš Bayer (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 10 / 66

11 Třídění přímým vkládáním 8. Zdrojový kód Insert Sort: Realizován dvojicí cyklů. Vnější probíhá nad všemi prvky. Vnitřní, dokud není prvek na správném místě. void insertsort(double x []) { for(int i = 0;i < x.length; i++) { int j = i; //Zapamatuj index zpracovávaného prvku double prvek = x[i]; while (j > 0 && x[j-1] > prvek) //Porovnavani s seteridenou cas { temp = x[j]; //Prohozeni za pouziti x[j] = x[j-1]; //pomocne promenne temp x[j-1] = temp; j = j - 1; //Dekrementace indexu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 11 / 66

12 Třídění přímým vkládáním 9. Modifikace algoritmu přímého vkládání Nepoužíváme zarážku, v každém porovnávání neprohazujeme testovaný prvek s prvkem předchozím. Prvky pole nacházející se vlevo od testovaného prvku větší než tento prvek posunujeme v každém kroku o 1 pozici vpravo. Do vzniklé mezery zapíšeme testovaný prvek. void insertsort(double x []) { for(int i = 0;i < x.length; i++) { int j = i; double prvek = x[i]; while (j > 0 && x[j-1] > prvek) { x[j] = x[j-1]; j = j - 1; x[j] = prvek; //Posun prvku o 1 pozici vpravo //Dekrementace indexu //Zarazeni prvku na spravne misto Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 12 / 66

13 Třídění binárním vkládáním 10. Třídění binárním vkládáním =Insert Binary Sort. Vylepšené třídění vkládáním, snaha urychlit nalezení místa, kam prvek patří. Pro urychlení používáme binární vyhledávání (O(log 2 N) vs. O(N) ). Princip algoritmu: Binární vyhledávání probíhá v setříděné části pole v intervalu < 0, i 1 >. V indexu l Binary Search bude uložena správná pozice prvku x[i]. Následně odsuneme všechny prvky v intervalu < l, i 1 > o jednu pozici vpravo. Na pozici l přesuneme kopírovaný prvek. Výrazné navýšení rychlosti algoritmu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 13 / 66

14 Třídění binárním vkládáním 11. Zdrojový kód binárního vkládání void insertbinarysort(double x[]) { for (int i = 0; i < x.length; i++) { int j = i; double prvek = x[i]; int l = 0, p = i - 1; //Levy a pravy index while (l <= p) { //Binary Search int k = (l + p) / 2; if (prvek > x[k]) l = k + 1; else p = k - 1; while (j > l) { //Index l = hledana pozice x[j] = x[j - 1]; //Posun prvku o 1 pozici vpravo j = j - 1; //Dekrementace indexu x[l] = prvek; //Zarazeni prvku na spravne misto Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 14 / 66

15 12. Bublinkové třídění Bublinkové třídění Bubble Sort. Nejpomalejší ze všech uvedených. Nevhodné pro částečně setříděné posloupnosti, běží naprázdno (možné odstranit). Složitost O(N 2 ), počet přesunů C max = 0.75(n 2 n). Popis algoritmu: Odvozen od chování vzduchových bublinek limonádě, které postupně stoupají vzhůru k hladině. Porovnávány dva sousední prvky x i a x i 1. Pokud x i < x i 1, prohodíme oba prvky. V opačném případě je ponecháme ve stejném pořadí a porovnáme následující dvojici prvků. Porovnávání začíná od konce pole. Prvky s menší hodnotou se postupně přesouvají zprava doleva jako bublinky v limonádě. Po prvním průchodu prvek x 0 představuje minimum, v dalším kroku již nemusíme procházet celé pole, ukončíme ho na prvku x 1. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 15 / 66

16 Bublinkové třídění 13. Znázornění algoritmu Tomáš Bayer (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 16 / 66

17 Bublinkové třídění 14. Zdrojový kód Realizován dvojicí cyklů. Vnější probíhá nad všemi prvky. Vnitřní o 1x méně. void bubblesort(double x []) { for (int i = 0;i < x.length; i++) { for (int j = x.length-1; j > i; j--) //Prohledavani od konce { if (x[j] < x[j-1]) { double temp = x[j]; //Prohozeni za pouziti x[j] = x[j-1]; //pomocne promenne temp x[j-1] = temp; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 17 / 66

18 Bublinkové třídění 15. Zhodnocení algoritmu Nesymetrická rychlost bublání prvků: Prvky malých hodnot stoupají rychleji než prvky velkých hodnot klesají. Po prvním vykonání vnitřního cyklu se minimální hodnota nachází na první pozici, zatímco nejvyšší hodnota se posune pouze o jednu pozici. Nevýhoda třídění bubláním: Značná závislost na vstupních datech. Pokud jsou vstupní data ve tvaru, kdy je většina prvků již setříděna, algoritmus běží v některých krocích naprázdno, neprovádí žádné prohazování. Pokud bychom na vstup dali již setříděná data, proběhnou oba cykly včetně testovací podmínky. Časová složitost: Časová složitost třídění bubláním je O(N 2 ). Nelze použít pro rozsáhlá data. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 18 / 66

19 Bublinkové třídění 16. Modifikace bublinkového třídění Odstranění prázdných kroků. Pomocná proměnná typu boolean sort, pokud je true, posloupnost je setříděna. void bubblesort(double x []) { bool sort = false; for (int i = 0;!sort; i++) { sort = true; for (int j = x.length - 1; j > i; j--) { if (x[j] < x[j-1]) { double temp = x[j]; x[j] = x[j-1]; x[j-1] = temp; sort = false; //Setridena posloupnost //Prohledavani od konce //Prohozeni za pouziti //pomocne promenne tep //Neni setridena posloupnost Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 19 / 66

20 Tomáš Nelze Bayer použít pro rozsáhlejší (Katedra aplikované data. Třídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 20 / 66 Třídění přímým výběrem 17. Třídění přímým výběrem: Select Sort. Efektivnější než Insert Sort. Používá se na dotřídění krátkých posloupností u algoritmu QuickSort. Složitost O(N 2 ), počet přesunů C max = 0.25N 2 + 3(N 1). Popis algoritmu: Předchozí techniky třídění využívaly porovnání aktuálního prvku x i s ostatními prvky posloupnosti, na základě výsledku této relace s prvkem x i prováděly další operace. Tato metoda třídění nevybírá prvky z nesetříděné části posloupnosti sekvenčně, ale na základě jejich hodnoty. Prvek je vložen do setříděné části na předem známou pozici, která se již v průběhu třídění nemění, v předchozích algoritmech se jeho hodnota měnila (odsouvání či prohazování).

21 18. Princip algoritmu Třídění přímým výběrem Tříděná posloupnost je rozdělena na dvě části: levá obsahuje již setříděné prvky posloupnosti ve správném pořadí, pravá prvky dosud nesetříděné. Start: dim(s) = 0, dim(n) = n. 1 V prvním kroku nalezneme hodnotu x min = min(x i ), i = 1,.., N, tj. prohledáváme celou posloupnost prvků. 2 Hodnotu x min prohodíme s hodnotou x 0. Prvek x 0 se nachází na správné pozici, jeho poloha se již v průběhu třídění nebude měnit. 3 V druhém kroku hledáme minimum z nesetříděné části prvků, tj. x min = min(x i ), i = 2,.., N. Tento prvek prohodíme s prvkem x 1. Poloha prvku x 1 se již při dalším třídění nebude měnit. 4 Opakujeme. 5 Poslední nesetříděný prvek x n bude umístěn na správném místě. End: dim(s) = n, dim(n) = 0. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 21 / 66

22 Třídění přímým výběrem 19. Ukázka algoritmu Tomáš Bayer (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 22 / 66

23 20. Zdrojový kód Třídění realizováno dvojicí cyklů. Třídění přímým výběrem void selectsort(double x []) { for (int i = 0; i < x.length - 1; i++) { double min = x[i]; int index = i; for (int j = i; j < x.length; j++) { if (min > x[j]) { min = x[j]; index = j; double temp = x[i]; x[i] = min; x[index] = temp; //Inicializace minima //Inicializace indexu //Hledani minima //Prohozeni promennych Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 23 / 66

24 Třídění přímým výběrem 21. Modifikace algoritmu Ve vnitřním cyklu nebudeme hledat minimum, ale pouze index minima. void selectsort(double x []) { for (int i = 0; i < x.length; i++) { int index = i ; for (int j = i; j < x.length; j++) { if (x[index]> x[j]) index = j; double temp = x[i]; x[i] = x[index]; x[index] = temp; //Inicializace indexu //Hledani indexu minima //Prohozeni promennych Modře znázorněno hledání indexu minima. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 24 / 66

25 Třídění se zmenšujícím se krokem 22. Třídění se zmenšujícím se krokem =Shell Sort. Eliminuje neefektivitu předchozích algoritmů spočívající v prohazování na krátké vzdálenosti. Neprohazuje pouze sousední prvky, provádí prohazování prvků s krokem h. Takový soubor nazýván h setříděný. Krok h se neustále zmenšuje, pro h = 1 je soubor setříděn. Možnosti volby kroku h: h i = 3h i 1 + 1, h i = 2h i Posloupnosti se střídajícími se lichými a sudými členy: h = {1, 4, 13, 40, 121, 364, 1093, 3280, 9841,... h = {1, 3, 7, 15, 31, 63, 127, 255, 511, 1023,... Pro malé kroky h už zbývá málo prohozů, většina vykonána v předcházejících krocích s větším h. Výhodou snížení složitosti až na O(N 1.2 ), nejpříznivější ze všech elementárních Tomáš algoritmů. Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 25 / 66

26 Třídění se zmenšujícím se krokem 23. Princip algoritmu Algoritmus je zobecněním Insert Sortu (nejčastější). Pro prohazování však existují i jiné metody (např. bublání). Shell Sort pro h = 1 Insert Sortem nad již částečně setříděnou posloupností. Postup: Výpočet iniciační hodnoty kroku h = 3h + 1, h < n. Opakuj pro h = h/3 Insert Sort s krokem h. Neporovnáváme sousední prvky x[j] a x[j 1], ale x[j] a x[j h]. Důsledky: Ve vnějším cyklu Insert Sort nahradíme inicializaci i=0 za i = h Ve vnitřním cyklu Insert Sortu nahradíme všechny výskyty indexu j 1 za j h. Jednoduchá implementace, pouze malá změna algoritmu Insert Sort přinese značné zvýšení výkonu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 26 / 66

27 Třídění se zmenšujícím se krokem 24. Ukázka algoritmu Tomáš Bayer (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 27 / 66

28 Třídění se zmenšujícím se krokem 25. Ukázka algoritmu Tomáš Bayer (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 28 / 66

29 26. Zdrojový kód Třídění se zmenšujícím se krokem public void shellsort(double x[]) { int h; for (h = 1; h < x.length - 1; h = 3 * h + 1); //Nastaveni h for (h /= 3; h > 0; h /= 3) { for (int i = h; i < x.length; i++) { //Inkrementace i o int j = i ; double prvek = x[i]; while ((j >= h) && (x[j - h] > prvek)) { x[j] = x[j - h]; //Posun prvku o h pozic j = j - h; //Dekrementace indexu o x[j] = prvek; //Zarazeni prvku na spra Modře znázorněn Insert Sort. Pozor: netestujeme prvky x[j] a x[j-1] ale x[j] a x[j-h]! Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 29 / 66

30 QuickSort 28. QuickSort Jeden z nejpoužívanějších třídících algoritmů. Využívá principu rozděl a panuj, lze implementovat rekurzivně i nerekurzivně. Vysokého výkonu dosáhne prohazování prvků na velké vzdálenosti. Inspirace: Posloupnost prvků seřazených sestupně: i 1, n platí x i x i+1. Pokud bychom chtěli takovou posloupnost setřídit vzestupně, jako velmi rychlý by se jevil následující postup prohazování: x 1 x n, x 2 x n 1,..., tj. výměna prvního prvek s posledním, druhého s předposledním, atd. V takovém případě nebude potřeba k setřídění n 1 výměn, ale pouze n/2. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 30 / 66

31 29. Princip QuickSortu QuickSort V prvním kroku je zvolena střední hodnota x, tzv. pivot. Posloupnost je uspořádána rozdělením na dvě části tak, že levá část obsahuje prvky x i < x, pravá část prvky x i > x. Hodnota pivotu x může být zvolena náhodně, představovat medián či aritmetický průměr (viz dále). Každá z těchto částí je stejným způsobem rekurzivně rozdělena. Počty úseků se s každým dělením zdvojnásobují, délky úseků (tj. počty prvků) snižují na polovinu. Dělení provádíme tak dlouho, dokud délky úseků nejsou rovny jedné. V takovém případě je posloupnost setříděna. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 31 / 66

32 QuickSort 30. Volba pivota B) první prvek x = x 1 Pivot je představován prvním prvkem z posloupnosti. Jedná se o nejméně výhodnou volbu, složitost třídění O(N 2 ). Degenerovaný strom, výška N 1. B) medián x = x Nejlepší varianta, strom s výškou log 2 (N). Ale složitost nalezení mediánu je O(N). Složitost celkem O(N 2 ). C) náhodný prvek x = rand(x i ) Nejčastěji používaná varianta, složitost algoritmu je (N log N), ale O(N 2 )! Algoritmus je ve většině případů téměř tak rychlý, jako při použití mediánu. Pravděpodobnost, že při každém náhodném volání nalezen první prvek, malá. Nevýhodou algoritmu QuickSort je jeho proměnná časová složitost závisející Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 32 / 66

33 QuickSort 31. QuickSort Pseudokód algoritmu QuickSort QuickSort(double [] pole, int levy, int pravy) { int m = (int)(0.5 * (l + p)); //Prostredni prvek /* Vlastni trideni */ QuickSort(pole, levy, m-1); QuickSort(pole, m+1, pravy); //Setrideni leve poloviny //Setrideni prave poloviny QuickSort lze realizovat s použitím rekurze či převodem na zásobník. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 33 / 66

34 QuickSort 32. Prohazování prvků v QuickSortu Snaha prohazovat co nejvzdálenější prvky: Od prvku x 1 postupujeme směrem vpravo a hledáme prvek, pro který platí x v > x. Od prvku x n postupujeme směrem vlevo a hledáme prvek, pro který platí x m < x. Oba prvky prohodíme. Uprostřed pole se směry prohledávání setkají, v takovém případě je postup ukončen. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 34 / 66

35 QuickSort 25. Znázornění algoritmu QuickSort Tomáš Bayer (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 35 / 66

36 QuickSort 33. Zdrojový kód prohazování prvků Vnější cyklus probíhá, dokud je prvky vlevo od pivotu větší než vpravo od pivotu. while(i < j) { while (x[i] < piv) i = i + 1; while (piv < x[j]) j = j - 1; if (i <= j) { double pom = x[i]; x[i] = x[j]; x[j] = pom; i = i + 1; j = j - 1; //Hledani prvku zleva, ktery se vymeni //Hledani prvku zprava, ktery se vymeni //Prohozeni obou prvku //Posun leveho indexu vpravo //Posun praveho indexu vlevo Určení pivota: piv = [int((l + p)/2)] ve snaze se co nejvíce přiblížit mediánu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 36 / 66

37 QuickSort 34. Zdrojový kód QuickSortu void QuickSort(double x [], int l, int p) { int i = l; int j = p; double piv = x[int((l + p) / 2)]; //Urceni pivota while(i < j) { while (x[i] < piv) i = i + 1; //Hledani prvku zleva, ktery se vymeni while (piv < x[j]) j = j - 1; //Hledani prvku zprava, ktery se vymeni if (i <= j) //Prohozeni obou prvku { pom = x[i]; x[i] = x[j]; x[j] = pom; i = i + 1; j = j - 1; if (l < j) QuickSort(x,l,j); //Rekurze if (i < p) QuickSort(x,i,p); //Rekurze //Posun leveho indexu vpravo //Posun praveho indexu vlevo Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 37 / 66

38 QuickSort 35. Zhodnocení algoritmu QuickSort Algoritmus QuickSort je velmi efektivní pro třídění velkých polí. Nejrychlejší třídící algoritmus. Jeho efektivita velmi výrazně závislá na volbě pivota, nejrychlejší levá a pravá část stejně velké. Z tohoto důvodu není používán v časově kritických aplikacích. Pro třídění malých polí (cca do 12 prvků) je překvapivě málo efektivní, dosahuje horších výsledků než Insert Sort. V praxi je QuickSort ukončován, pokud je délka posloupnosti získaná rekurzivním dělením kratší než 12 prvků. Posloupnost následně dotříděna jiným způsobem, např. Select Sort. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 38 / 66

39 36. Tříděné sléváním Třídění sléváním = Merge Sort Založen na principu Rozděl a panuj, rekurzivní algoritmus (rozděl = rekurze, spoj = merge). Využívá princip zatřid ování sloučení dvou menších setříděných souborů do jednoho většího setříděného souboru. Složitost algoritmu (na rozdíl od QuickSortu) vždy, není závislá na pivotovi. Ve většině případů je MergeSort pomalejší než QuickSort, není však citlivý vůči vstupním datům, stabilní. Používán jako standardní třídící algoritmus v Javě. Princip algoritmu: Rozdělení posloupnosti s n prvky na dvě podposloupnosti s n 2 prvky. Dělení rekurzivně opakováno, dokud podposloupnosti nejsou tvořeny jedním prvkem (takové jsou považovány za setříděné). Opakované spojování dvou podposloupností v jednu seřazenou podposloupnost, dokud nevznikne setříděná posloupnost s n prvky. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 39 / 66

40 Třídění sléváním 37. Vlastní algoritmus třídění sléváním Pole je rozděleno na dvě části. Na každou část rekurzivně voláno setřídění. Obě poloviny následně zatříděny (spojeny). void MergeSort (double [] a, int l, int p) { int m = (l + p) / 2; //Prostredni prvek if (p <= l) return; //Prazdny interval, spojeni MergeSort(a, l, m); //Setrid levou polovinu MergeSort(a, l+1, p); //Setrid pravou polovinu merge (a, l, m, p); //Spoj poloviny zatridenim Nevýhodou dodatečná pamět na pole při zatřid ování. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 40 / 66

41 Třídění sléváním 38. Znázornění algoritmu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 41 / 66

42 39. Druhy zatřid ování Třídění sléváním Dvoucestné zatřid ování: Pole a tvořeno n prvky, pole b tvořeno m prvky, slučované pole c tvořeno n + m prvky. Při každém průchodu cyklem nalezneme minimální hodnotu z obou polí a, b a přidáme ji do slučovaného pole c. Nutno vytvořit dvě pomocná pole, dodatečné pamět ové nároky. Režie spojená s kopírováním vstupního pole do obou pomocných polí. V praxi se nepoužívá. Zatřid ování na místě: Pouze jedno pomocné pole, rychlejší. Levá polovina pomocného pole obsahuje kopii levé poloviny vstupního pole. Pravá polovina pomocného pole obsahuje kopii pravé poloviny vstupního pole v opačném pořadí. ˇ ˇ Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Třídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 42 / 66

43 Třídění sléváním 40. Dvoucestné zatřid ování void merge(double [] c, double [] a, double [] b){ int N = a.length; int M = b.length; for (int i = 0, int j = 0, int k = 0; k < N + M; k++) { if (i == N) { //Pole a uz nema dalsi prvky c[k] = b[j]; j++; continue; //Skok na dalsi iteraci if (j == M) { //Pole b uz nema dalsi prvky c[k] = a[i]; i++; continue; //Skok na dalsi iteraci if (a[i] < b[j]) { c[k] = a[i]; //Pridani mensiho prvku i++; else { c[k] = b[j]; j++; //Pridani mensiho prvku Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 43 / 66

44 Třídění sléváním 41. Upravené dvoucestné zatřid ování public void merge(double[] c, int l, int mid, int p) { int n = mid - l + 1; int m = p - mid; double[] a = new double[n]; //Pomocne pole a double[] b = new double[m]; //Pomocne pole b System.arraycopy(c, l, a, 0, n); //Zkopiruj obsah pole c System.arraycopy(c, mid + 1, b, 0, m); //Zkopiruj obsah pole c int i = 0, j = 0, k = 0; for (; k < n + m; k++) { if (i == n) { c[k+l] = b[j]; j++; continue; if (j == m) { c[k+l] = a[i]; i++; continue; //Pole a uz nema dalsi prvky //Skok na dalsi iteraci //Pole b uz nema dalsi prvky //Skok na dalsi iteraci Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 44 / 66

45 Třídění sléváním 42. Zatřid ování na místě void merge (double [] a, int l, int m, int p) { double temp[n]; //Pomocne pole int i, j, k; for (i = m + 1; i > 1; i--) { temp[i-1] = a[i -1]; //Kopie prvniho pole // i = 1 for (j = m; j < p; j++) temp[p + m - j] = a[j+1]; //Kopie druheho pole v opacnem poradi //j = r for (k = 1; k <= p; k++) { if (a[i] < a[j]) { //Nalezeni mensiho prvku a[k] = temp[i]; //Pridani do pole i++; else { a[k] = temp[j]; //Pridani do pole j--; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 45 / 66

46 Halda a třídění haldou 43. Halda Halda (heap): datová struktura představovaná binárním stromem. Proč Heap Sort použita halda s globálním minimem v kořenu. Definice: Halda představuje takovou posloupnost prvků h l, h l+1, h l+2,..., h r, že pro každý index i = l,..., r/2 platí Příklad: h i h 2i hi h 2i+1. Halda definována posloupností h 1, h 2,..., h n, kde i = n/2. Kořen stromu h 1, h 2 levý potomek, h 3 pravý potomek. Levý potomek uzlu h 2 je h 4, pravý potomek je h 5, atd. Všichni leví potomci mají sudý index, všichni praví potomci levý index. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 46 / 66

47 44. Ukázka haldy Halda a třídění haldou h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 h11 h12 h13 h14 h15 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 47 / 66

48 45. Ukázka haldy Halda a třídění haldou Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 48 / 66

49 Halda a třídění haldou 46. Halda a její reprezentace Důsledky plynoucí z definice: Binární strom je haldou právě když hodnota uzlu je menší nebo rovna hodnotě potomků. Žádný uzel nemá menší hodnotu než kořen. Haldu lze reprezentovat polem, výhodou rychlý přístup. [] x Vztahy mezi pořadovým číslem uzlui ve stromu a indexy pole[i]: Rodič: [i/2]. Levý potomek: [2i]. Pravý potomek: [2i + 1]. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 49 / 66

50 Halda a třídění haldou 47. Operace nad heapem Operace nad heapem nutné k setřídění posloupnosti: přidání prvku do heapu, oprava heapu nahoru: fixheapup, oprava heapu dolů: fixheapdown, tisk heapu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 50 / 66

51 Halda a třídění haldou 47. Oprava haldy nahoru Pohyb haldou od uzlu U směrem ke kořeni haldy, nemá vliv na potomky U. Stromová reprezentace: Pokud předchůdce P uzlu U má vyšší hodnotu, prohodíme U P. Pokračujeme v předchůdci U = P, dokud U není kořen. Reprezentace polem: Pokud prvek [i/2] má menší hodnotu než prvek [i], prohodíme [i/2] [i]. Pokračujeme v předchůdci i = i/2 dokud i > 1. public void fixheapup(double[] h, int i) { while (i > 1 && (h[i / 2] > h[i])) { //Opakuj pro predchudce double temp = h[i / 2]; //Prohozeni s pouzitim h[i / 2] = h[i]; //lokalni promenne h[i] = temp; i = i / 2; //Jdi na rodice Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 51 / 66

52 Halda a třídění haldou 48. Ukázka opravy haldy nahoru Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 52 / 66

53 Halda a třídění haldou 49. Ukázka opravy haldy nahoru (30<->10) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 53 / 66

54 Halda a třídění haldou 50. Ukázka opravy haldy nahoru (10<->19) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 54 / 66

55 Halda a třídění haldou 51. Oprava haldy dolů Pohyb haldou od uzlu U směrem od kořene k listům haldy, nemá vliv na předchůdce U. Stromová reprezentace: Najdi následníky uzlu U: V L, V P. Pokud V P < V L, následník V = V P, jinak V = V L (přidáváme do menšího). Pokud U > V, prohod U V, jinak ukonči. Pokračuj v prohozeném vrcholu, dokud nedosáhneme listu. Reprezentace polem: Najdi následníky uzlu [i]: [2 i], [2 i + 1]. Pokud [2 i + 1] < [2 i], následník [v] = [2 i + 1], jinak [v] = [2 i] (přidáváme do menšího). Pokud [i] > [v], prohod [i] [v] jinak ukonči. Pokračuj v prohozeném vrcholu, dokud nedosáhneme listu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 55 / 66

56 Halda a třídění haldou 52. Algoritmus pro opravu haldy dolů public void fixheapdown(double[] h, int k, int n) { int i; while (2 * k <= n) { i = 2 * k; //Levy potomek if (i < n && h[i + 1] < h[i]) //Porovnani L a P potomka { i++; //Index ukazuje na mensiho potomka if (h[k] > h[i]) //Nesplneny podminky, prohodit { double temp = h[k]; h[k] = h[i]; h[i] = temp; else { k = i; break; //Ukonceny podminky, nepokracuj //Pokracuj od prohozeneho potomka Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 56 / 66

57 Halda a třídění haldou 53. Ukázka opravy haldy dolů Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 57 / 66

58 Halda a třídění haldou 54. Ukázka opravy haldy dolů (19<->15) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 58 / 66

59 Halda a třídění haldou 55. Ukázka opravy haldy dolů (18<->19) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 59 / 66

60 Halda a třídění haldou 56. Přidání prvku a do haldy Opakuj, pro x i x: Nový uzel U s hodnotou x i vytvořen na poslední hladině. Propojení uzlu U s uzlem P ležícím na předposlední hladině co nejvíce vlevo. Oprava haldy nahoru U. Heap představován polem h s délkou n+1, tj. o jednu pozici delší než počet tříděných prvků v x (přidáváme od 1). Heap plněn po řádcích, po každém vložení inkrementován index i o 1. int i = 1; for (int k = 0; k <= x.length - 1; k++) { h[i] = x[k]; //Pridej do heapu fixheapup(h, i); //Oprav heap nahoru do akt. pozice i++; //Inkrement i Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 60 / 66

61 Halda a třídění haldou 57. Ukázka budování haldy Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 61 / 66

62 Halda a třídění haldou 58. Vlastní třídící algoritmus Probíhá nad vybudovanou haldou poměrně triviální. Opakuj, dokud halda neobsahuje pouze kořen: Prohození kořene (minima haldy) s prvkem haldy nejnižší úrovně nejvíce vpravo. Oprava haldy dolů (v kořeni není minimum). Zkrácení haldy o prvek nejnižší úrovně nejvíce vpravo. Nad polem snadno algoritmizovatelné. Opakuj, dokud n > 1 Prohodíme h[1] a h[n]. Provedeme opravu haldy dolů z kořene. Dekrementujeme n. První výběr: nejmenší prvek, druhý výběr: druhý nejmenší prvek, atd. Jsou řazeny za koncem zkracované haldy sestupně. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 62 / 66

63 Halda a třídění haldou 59. Ukázka činnosti algoritmu ; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 63 / 66

64 Halda a třídění haldou 59. Algoritmus Heap Sort Pouze třídící procedura: Vlastnosti algoritmu: while (n > 1) { double temp = h[1]; //Vem nejmensi prvek h[1] = h[n]; //Prohod s poslednim h[n] = temp; n--; //Zkrat heap o 1 fixheapdown(h, 1, n); Algoritmus má složitost O(N lg 2 N). Asi o 20% pomalejší než Merge Sort a o 50% pomalejší než Quick Sort. Použití pro hledání k tého nejmenšího prvku. Nevýhodou nestabilita. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 64 / 66

65 Halda a třídění haldou 60. Zdrojový kód (celek) public void heapsort(double[] x) { int i = 1, n = x.length; double[] h = new double[n + 1]; //Heap o jeden prvek delsi for (int k = 0; k < n; k++) //Pridej vsechny prvky,oprav heap { h[i] = x[k]; //Pridej do heapu fixheapup(h, i); //Oprav heap zdola i++; //Inkrementuj i while (n > 1) { double temp = h[1]; //Vem nejmensi prvek h[1] = h[n]; //Prohod s poslednim h[n] = temp; n--; //Zkrat heap fixheapdown(h, 1, n); Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 65 / 66

66 Přehled třídících algoritmů 34. Přehled třídících algoritmů Worst case Average case Selection Sort n 2 n 2 Bubble Sort n 2 n 2 Insertion Sort n 2 n 2 Merge Sort n lg n n lg n Quick Sort n 2 n lg n Heap Sort n lg n n lg n Další odkazy: Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikovanétřídící geoinformatiky algoritmy. a kartografie, Přírodovědecká fakulta UK.) 66 / 66

Dynamické datové struktury III.

Dynamické datové struktury III. Dynamické datové struktury III. Halda. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované

Více

Dynamické datové struktury IV.

Dynamické datové struktury IV. Dynamické datové struktury IV. Prioritní fronta. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra

Více

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3

DobSort. Úvod do programování. DobSort Implementace 1/3. DobSort Implementace 2/3. DobSort - Příklad. DobSort Implementace 3/3 DobSort Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 V roce 1980 navrhl Dobosiewicz variantu (tzv. DobSort),

Více

Algoritmizace řazení Bubble Sort

Algoritmizace řazení Bubble Sort Algoritmizace řazení Bubble Sort Cílem této kapitoly je seznámit studenta s třídícím algoritmem Bubble Sort, popíšeme zde tuto metodu a porovnáme s jinými algoritmy. Klíčové pojmy: Třídění, Bubble Sort,

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Třídění, vyhledávání Daniela Szturcová

Více

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění

Náplň. v.0.03 16.02.2014. - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Náplň v.0.03 16.02.2014 - Jednoduché příklady na práci s poli v C - Vlastnosti třídění - Způsoby (algoritmy) třídění Spojení dvou samostatně setříděných polí void Spoj(double apole1[], int adelka1, double

Více

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) {

IAJCE Přednáška č. 9. int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) { // nikoli 0 if (Pole[i] > max) { Vyhledání extrému v poli použito v algoritmech řazení hledání maxima int[] pole = new int[pocet] int max = pole[0]; int id; for(int i =1; i< pole.length; i++) // nikoli 0 if (Pole[i] > max) max = pole[i];

Více

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort. A4B33ALG 2010/05 ALG 07 Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated Quicksort Stabilita řazení 1 Selection sort Neseřazeno Seřazeno Start T O U B J R M A K D Z E min

Více

NPRG030 Programování I, 2018/19 1 / :03:07

NPRG030 Programování I, 2018/19 1 / :03:07 NPRG030 Programování I, 2018/19 1 / 20 3. 12. 2018 09:03:07 Vnitřní třídění Zadání: Uspořádejte pole délky N podle hodnot prvků Měřítko efektivity: * počet porovnání * počet přesunů NPRG030 Programování

Více

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí: Metody řazení ve vnitřní a vnější paměti. Algoritmy řazení výběrem, vkládáním a zaměňováním. Heapsort, Shell-sort, Radix-sort, Quicksort. Řazení sekvenčních souborů. Řazení souborů s přímým přístupem.

Více

Základy algoritmizace a programování

Základy algoritmizace a programování Základy algoritmizace a programování Složitost algoritmů. Třídění Přednáška 8 16. listopadu 2009 Který algoritmus je "lepší"? Různé algoritmy, které řeší stejnou úlohu zbytek = p % i; zbytek = p - p/i*i;

Více

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem Test prvočíselnosti Úkol: otestovat dané číslo N, zda je prvočíslem 1. zkusit všechny dělitele od 2 do N-1 časová složitost O(N) cca N testů 2. stačí zkoušet všechny dělitele od 2 do N/2 (větší dělitel

Více

Základy řazení. Karel Richta a kol.

Základy řazení. Karel Richta a kol. Základy řazení Karel Richta a kol. Přednášky byly připraveny s pomocí materiálů, které vyrobili Marko Berezovský, Petr Felkel, Josef Kolář, Michal Píše a Pavel Tvrdík Katedra počítačů Fakulta elektrotechnická

Více

IB111 Úvod do programování skrze Python

IB111 Úvod do programování skrze Python Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2012 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý (je časově

Více

Dynamické datové struktury I.

Dynamické datové struktury I. Dynamické datové struktury I. Seznam. Fronta. Zásobník. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

Stromy. Jan Hnilica Počítačové modelování 14

Stromy. Jan Hnilica Počítačové modelování 14 Stromy Jan Hnilica Počítačové modelování 14 1 Základní pojmy strom = dynamická datová struktura, složená z vrcholů (uzlů, prvků) propojených hranami hrany chápeme jako orientované, tzn. vedou z uzlu A

Více

Maturitní téma: Programovací jazyk JAVA

Maturitní téma: Programovací jazyk JAVA Maturitní téma: Programovací jazyk JAVA Insert Sort (třídění vkládáním) 1. Jako setříděnou část označíme první prvek pole. Jako nesetříděnou část označíme zbytek pole. 2. Vezmeme první (libovolný) prvek

Více

3 Algoritmy řazení. prvku a 1 je rovněž seřazená.

3 Algoritmy řazení. prvku a 1 je rovněž seřazená. Specifikace problému řazení (třídění): A... neprázdná množina prvků Posl(A)... množina všech posloupností prvků z A ... prvky množiny Posl(A) q... délka posloupnosti Posl(A), přičemž Delka()

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 21. září 2018 Jiří Dvorský (VŠB TUO) Vyhledávání 242 / 433 Osnova přednášky

Více

Prioritní fronta, halda

Prioritní fronta, halda Prioritní fronta, halda Priority queue, heap Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 26 Prioritní fronta Halda Heap sort 2 / 26 Prioritní fronta (priority queue) Podporuje

Více

Algoritmy a datové struktury

Algoritmy a datové struktury Algoritmy a datové struktury Stromy 1 / 32 Obsah přednášky Pole a seznamy Stromy Procházení stromů Binární stromy Procházení BS Binární vyhledávací stromy 2 / 32 Pole Hledání v poli metodou půlení intervalu

Více

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12. Vyhledávání doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 12. září 2016 Jiří Dvorský (VŠB TUO) Vyhledávání 201 / 344 Osnova přednášky

Více

Třídění a vyhledávání Searching and sorting

Třídění a vyhledávání Searching and sorting Třídění a vyhledávání Searching and sorting Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 1 / 33 Vyhledávání Třídění Třídící algoritmy 2 / 33 Vyhledávání Searching Mějme posloupnost (pole)

Více

Sada 1 - Základy programování

Sada 1 - Základy programování S třední škola stavební Jihlava Sada 1 - Základy programování 17. Řadící algoritmy Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2

Více

Rekurze a rychlé třídění

Rekurze a rychlé třídění Rekurze a rychlé třídění Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2017 1 / 54 Rekurze Rychlé třídění 2 / 54 Rekurze Recursion Rekurze = odkaz na sama sebe, definice za pomoci sebe

Více

Algoritmy I, složitost

Algoritmy I, složitost A0B36PRI - PROGRAMOVÁNÍ Algoritmy I, složitost České vysoké učení technické Fakulta elektrotechnická v 1.01 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená??

Více

Stromy, haldy, prioritní fronty

Stromy, haldy, prioritní fronty Stromy, haldy, prioritní fronty prof. Ing. Pavel Tvrdík CSc. Katedra počítačů FEL České vysoké učení technické DSA, ZS 2008/9, Přednáška 6 http://service.felk.cvut.cz/courses/x36dsa/ prof. Pavel Tvrdík

Více

Bubble sort. příklad. Shaker sort

Bubble sort. příklad. Shaker sort Bubble sort pseudokód function bubblesort(array a) for i in 1 -> a.length - 1 do for j in 1 -> a.length - i - 1 do if a[j] < a[j+1] prohoď(a[j], a[j+1]); //razeni od nejvyssiho function bubblesort(int[]

Více

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 20. září 2016 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

Algoritmy I. Třídění ALGI 2010/2011

Algoritmy I. Třídění ALGI 2010/2011 Algoritmy I Třídění 1 ALGI 2010/2011 Třídící problém Je dána množina A = {a 1,a 2,...,a n }. Je potřebné najít permutaci π těchto n prvků, která zobrazuje danou posloupnost do neklesající posloupnosti

Více

Řazení. Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria.

Řazení. Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria. Řazení Problém řazení: Uspořádat množinu prvků obsahujících klíč podle definovaného kriteria. Až 30% času běžného počítače. Příklad: Mějme zjistit zda jsou v posloupnosti prvků, například celých čísel,

Více

Prohledávání do šířky = algoritmus vlny

Prohledávání do šířky = algoritmus vlny Prohledávání do šířky = algoritmus vlny - souběžně zkoušet všechny možné varianty pokračování výpočtu, dokud nenajdeme řešení úlohy průchod stromem všech možných cest výpočtu do šířky, po vrstvách (v každé

Více

Algoritmizace a programování

Algoritmizace a programování Algoritmizace a programování Vyhledávání, vkládání, odstraňování Vyhledání hodnoty v nesetříděném poli Vyhledání hodnoty v setříděném poli Odstranění hodnoty z pole Vkládání hodnoty do pole Verze pro akademický

Více

Pole a kolekce. v C#, Javě a C++

Pole a kolekce. v C#, Javě a C++ Pole a kolekce v C#, Javě a C++ C# Deklarace pole typ_prvku_pole[] jmeno_pole; Vytvoření pole jmeno_pole = new typ_prvku_pole[pocet_prvku_pole]; Inicializace pole double[] poled = 4.8, 8.2, 7.3, 8.0; Java

Více

bfs, dfs, fronta, zásobník, prioritní fronta, halda

bfs, dfs, fronta, zásobník, prioritní fronta, halda bfs, dfs, fronta, zásobník, prioritní fronta, halda Petr Ryšavý 19. září 2017 Katedra počítačů, FEL, ČVUT prohledávání grafů Proč prohledávání grafů Zkontrolovat, zda je sít spojitá. Hledání nejkratší

Více

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání

Select sort: krok 1: krok 2: krok 3: atd. celkem porovnání. výběr nejmenšího klíče z n prvků vyžaduje 1 porovnání Select sort: krok 1: výběr klíče z n prvků vyžaduje 1 porovnání krok 2: výběr klíče z 1 prvků vyžaduje 2 porovnání krok 3: výběr klíče z 2 prvků vyžaduje 3 porovnání atd. celkem porovnání Zlepšení = použít

Více

Časová složitost algoritmů, řazení a vyhledávání

Časová složitost algoritmů, řazení a vyhledávání Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Časová složitost algoritmů, řazení a vyhledávání BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík Fakulta

Více

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce)

Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce) 13. Metody vyhledávání. Adresní vyhledávání (přímý přístup, zřetězené a otevřené rozptylování, rozptylovací funkce). Asociativní vyhledávání (sekvenční, binárním půlením, interpolační, binární vyhledávací

Více

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_26 04 Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Třídění dat Autor:

Více

5. Vyhledávání a řazení 1

5. Vyhledávání a řazení 1 Jiří Vokřínek, 2016 B6B36ZAL - Přednáška 5 1 Základy algoritmizace 5. Vyhledávání a řazení 1 doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

Více

TGH07 - Chytré stromové datové struktury

TGH07 - Chytré stromové datové struktury TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 1. dubna 2014 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním

Více

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol. Stromy Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2018, B6B36DSA 01/2018, Lekce 9 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start

Více

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz (2 + 5) * (13-4) * + - 2 5 13 4 - listy stromu obsahují operandy (čísla) - vnitřní uzly obsahují operátory (znaménka)

Více

Základní datové struktury III: Stromy, haldy

Základní datové struktury III: Stromy, haldy Základní datové struktury III: Stromy, haldy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní

Více

Dynamické datové struktury II.

Dynamické datové struktury II. Dynamické datové struktury II. Stromy. Binární vyhledávací strom. DFS. BFS. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

TGH07 - Chytré stromové datové struktury

TGH07 - Chytré stromové datové struktury TGH07 - Chytré stromové datové struktury Jan Březina Technical University of Liberec 5. dubna 2017 Prioritní fronta Datová struktura s operacemi: Odeber Minum (AccessMin, DeleteMin) - vrat prvek s minimálním

Více

IB111 Úvod do programování skrze Python

IB111 Úvod do programování skrze Python Vyhledávání, řazení, složitost IB111 Úvod do programování skrze Python 2014 1 / 48 Otrávené studny 8 studen, jedna z nich je otrávená laboratorní rozbor dokáže rozpoznat přítomnost jedu ve vodě je drahý

Více

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce

Universita Pardubice Fakulta elektrotechniky a informatiky. Mikroprocesorová technika. Semestrální práce Universita Pardubice Fakulta elektrotechniky a informatiky Mikroprocesorová technika Semestrální práce Jméno: Chmelař Pavel Datum: 14. 5. 2008 Úkol: Příklad č. 1 V paměti dat je uložen blok 8 b čísel se

Více

Vyvažování a rotace v BVS, všude se předpokládá AVL strom

Vyvažování a rotace v BVS, všude se předpokládá AVL strom Vyvažování a rotace v BVS, všude se předpokládá AVL strom 1. Jednoduchá levá rotace v uzlu u má operační složitost a) závislou na výšce levého podstromu uzlu u b) mezi O(1) a Θ(n) c) závislou na hloubce

Více

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení

ALG 09. Radix sort (přihrádkové řazení) Counting sort. Přehled asymptotických rychlostí jednotlivých řazení. Ilustrační experiment řazení ALG Radix sort (přihrádkové řazení) Counting sort Přehled asymptotických rychlostí jednotlivých řazení Ilustrační experiment řazení Radix sort Neseřazeno Řaď podle. znaku Cbb DaD adb DCa CCC add DDb adc

Více

Hledání k-tého nejmenšího prvku

Hledání k-tého nejmenšího prvku ALG 14 Hledání k-tého nejmenšího prvku Randomized select CLRS varianta Partition v Quicksortu 0 Hledání k-tého nejmenšího prvku 1. 2. 3. Seřaď seznam/pole a vyber k-tý nejmenší, složitost (N*log(N)). Nevýhodou

Více

Složitost UPR 2008/09 1

Složitost UPR 2008/09 1 Složitost UPR 2008/09 1 Ohodnocení algoritmu Jak porovnávat efektivitu algoritmů? Požadavky na paměť Požadavky na rychlost výpočtu Asymptotická složitost UPR 2008/09 2 Měření algoritmu Dvě míry: čas x

Více

Rekurzivní algoritmy

Rekurzivní algoritmy Rekurzivní algoritmy prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA) ZS

Více

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto:

V případě jazyka Java bychom abstraktní datový typ Time reprezentující čas mohli definovat pomocí třídy takto: 20. Programovací techniky: Abstraktní datový typ, jeho specifikace a implementace. Datový typ zásobník, fronta, tabulka, strom, seznam. Základní algoritmy řazení a vyhledávání. Složitost algoritmů. Abstraktní

Více

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost

Amortizovaná složitost. Prioritní fronty, haldy (binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost Amortizovaná složitost. Prioritní fronty, haldy binární, d- regulární, binomiální, Fibonacciho), operace nad nimi a jejich složitost 1. Asymptotické odhady Asymptotická složitost je deklarována na základě

Více

5 Rekurze a zásobník. Rekurzivní volání metody

5 Rekurze a zásobník. Rekurzivní volání metody 5 Rekurze a zásobník Při volání metody z metody main() se do zásobníku uloží aktivační záznam obsahující - parametry - návratovou adresu, tedy adresu, kde bude program pokračovat v metodě main () po skončení

Více

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015

Programování 3. hodina. RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Programování 3. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Implementace zásobníku a fronty pomocí

Více

Prioritní fronta, halda (heap), řazení

Prioritní fronta, halda (heap), řazení Prioritní fronta, halda (heap), řazení Co je prioritní fronta? Definována operacemi - vlož prvek - vyber největší (nejmenší) prvek Proč pf? Rozhraní: class PF { // ADT rozhrani PF(); boolean jeprazdna();

Více

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C Hanojské věže - 3 kolíky A, B, C - na A je N disků různé velikosti, seřazené od největšího (dole) k nejmenšímu (nahoře) - kolíky B a C jsou prázdné - úkol: přenést všechny disky z A na B, mohou se odkládat

Více

Časová složitost algoritmů

Časová složitost algoritmů Časová složitost algoritmů Důležitou vlastností algoritmu je časová náročnost výpočtů provedené podle daného algoritmu Ta se nezískává měřením doby výpočtu pro různá data, ale analýzou algoritmu, jejímž

Více

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti.

Intervalové stromy. Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme. 1. Změna jednoho čísla v posloupnosti. Intervalové stromy Představme si, že máme posloupnost celých čísel p 0, p 1,... p N 1, se kterou budeme průběžně provádět tyto dvě operace: 1. Změna jednoho čísla v posloupnosti. 2. Zjištění součtu čísel

Více

Zadání k 2. programovacímu testu

Zadání k 2. programovacímu testu Zadání k 2. programovacímu testu Úvod do programovacích jazyků (Java) 4.12.2008 00:08 Michal Krátký Katedra informatiky Technická univerzita Ostrava Historie změn, příklady: 21 Poznámka: Pokud není řečeno

Více

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech

ALG 14. Vícedimenzionální data. Řazení vícedimenzionálních dat. Experimentální porovnání řadících algoritmů na vícedimenzionálních datech ABALG 5/ ALG Vícedimenzionální data Řazení vícedimenzionálních dat Experimentální porovnání řadících algoritmů na vícedimenzionálních datech ABALG 5/ Vícedimenzionální data..7.. -.. d = 6 5 6.....7.. -.....9

Více

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10

1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 Úlohy- 2.cvičení 1. Převeďte dané číslo do dvojkové, osmičkové a šestnáctkové soustavy: a) 759 10 b) 2578 10 2. Převeďte dané desetinné číslo do dvojkové soustavy (DEC -> BIN): a) 0,8125 10 b) 0,35 10

Více

Datové struktury 2: Rozptylovací tabulky

Datové struktury 2: Rozptylovací tabulky Datové struktury 2: Rozptylovací tabulky prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy

Více

Úvod do programování 6. hodina

Úvod do programování 6. hodina Úvod do programování 6. hodina RNDr. Jan Lánský, Ph.D. Katedra informatiky a matematiky Fakulta ekonomických studií Vysoká škola finanční a správní 2015 Umíme z minulé hodiny Algoritmy Třídění pole: Selection

Více

Časová a prostorová složitost algoritmů

Časová a prostorová složitost algoritmů .. Časová a prostorová složitost algoritmů Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Hodnocení algoritmů Programovací techniky Časová a prostorová

Více

Standardní algoritmy vyhledávací.

Standardní algoritmy vyhledávací. Standardní algoritmy vyhledávací. Vyhledávací algoritmy v C++ nám umožňují vyhledávat prvky v datových kontejnerech podle různých kritérií. Také se podíváme na vyhledávání metodou půlením intervalu (binární

Více

vyhledávací stromové struktury

vyhledávací stromové struktury vyhledávací algoritmy Brute Force Binary Search Interpolation Search indexové soubory Dense index, Sparse index transformační funkce Perfect Hash, Close Hash Table, Open Hash Table vyhledávací stromové

Více

ALGORITMY A DATOVÉ STRUKTURY

ALGORITMY A DATOVÉ STRUKTURY Název tématického celku: Cíl: ALGORITMY A DATOVÉ STRUKTURY Metodický list č. 1 Časová složitost algoritmů Základním cílem tohoto tematického celku je vysvětlení potřebných pojmů a definic nutných k popisu

Více

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK) Strom / tree uzel, vrchol / node, vertex hrana / edge vnitřní uzel

Více

Algoritmy vyhledávání a řazení. Zatím nad lineární datovou strukturou (polem)

Algoritmy vyhledávání a řazení. Zatím nad lineární datovou strukturou (polem) Algoritmy vyhledávání a řazení Zatím nad lineární datovou strukturou (polem) Vyhledávací problém Vyhledávání je dáno Universum (množina prvků) U je dána konečná množina prvků X U (vyhledávací prostor)

Více

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012 Obecná informatika Přednášející Putovních přednášek Matematicko-fyzikální fakulta Univerzity Karlovy v Praze Podzim 2012 Přednášející Putovních přednášek (MFF UK) Obecná informatika Podzim 2012 1 / 18

Více

Praktická cvičení algoritmů

Praktická cvičení algoritmů UČEBNÍ TEXTY OSTRAVSKÉ UNIVERZITY Přírodovědecká fakulta Praktická cvičení algoritmů Hashim Habiballa Ostravská Univerzita 2006 Praktická cvičení algoritmů KIP/XPOP1 distanční studijní opora RNDr. PaedDr.

Více

Dynamické programování

Dynamické programování Dynamické programování prof. Ing. Pavel Tvrdík CSc. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Efektivní algoritmy (BI-EFA)

Více

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Dynamicky vázané metody. Pozdní vazba, virtuální metody Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:

Více

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

bin arn ı vyhled av an ı a bst Karel Hor ak, Petr Ryˇsav y 23. bˇrezna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT binární vyhledávání a bst Karel Horák, Petr Ryšavý 23. března 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Naimplementujte binární vyhledávání. Upravte metodu BinarySearch::binarySearch. 1 Příklad 2 Mysĺım

Více

Základní stavební prvky algoritmu

Základní stavební prvky algoritmu Základní stavební prvky algoritmu Podmínka. Cyklus for, while, do-while. Funkce, metody. Přetěžování. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká

Více

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu. Informatika 10. 9. 2013 Jméno a příjmení Rodné číslo 1) Napište algoritmus pro rychlé třídění (quicksort). 2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus

Více

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39 Základy algoritmizace Michal Krátký 1, Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Základy algoritmizace, 2006/2007 Základy algoritmizace c2005, 2007 Michal Krátký, Jiří Dvorský1/39

Více

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620 1. Vymezení pojmů Strom: Strom je takové uspořádání prvků - vrcholů, ve kterém lze rozeznat předchůdce - rodiče a následovníky - syny.

Více

Algoritmy používané ve výpočetní geometrii

Algoritmy používané ve výpočetní geometrii Algoritmy používané ve výpočetní geometrii Hrubá síla. Inkrementální metoda. Zametací přímka. Heuristiky. Rozděl a panuj. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie.

Více

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou

Více

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy

Stromy. Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Stromy úvod Stromy Strom: souvislý graf bez kružnic využití: počítačová grafika seznam objektů efektivní vyhledávání výpočetní stromy rozhodovací stromy Neorientovaný strom Orientovaný strom Kořenový orientovaný

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy

Volné stromy. Úvod do programování. Kořenové stromy a seřazené stromy. Volné stromy Volné stromy Úvod do programování Souvislý, acyklický, neorientovaný graf nazýváme volným stromem (free tree). Často vynecháváme adjektivum volný, a říkáme jen, že daný graf je strom. Michal Krátký 1,Jiří

Více

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.

Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz

Více

Binární soubory (datové, typované)

Binární soubory (datové, typované) Binární soubory (datové, typované) - na rozdíl od textových souborů data uložena binárně (ve vnitřním tvaru jako v proměnných programu) není čitelné pro člověka - všechny záznamy téhož typu (může být i

Více

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

Datový typ prioritní fronta Semestrální práce z předmětu 36PT Datový typ prioritní fronta Semestrální práce z předmětu 36PT Martin Tůma Cvičení 113, Út 18:00 22. května 2004 Specifikace problému Často potřebujeme přístup k informacím, tak aby tyto byly seřazeny podle

Více

Předmět: Algoritmizace praktické aplikace

Předmět: Algoritmizace praktické aplikace Předmět: Algoritmizace praktické aplikace Vytvořil: Roman Vostrý Zadání: Vytvoření funkcí na stromech (reprezentace stromu haldou). Zadané funkce: 1. Počet vrcholů 2. Počet listů 3. Součet 4. Hloubka 5.

Více

Úvod do programování - Java. Cvičení č.4

Úvod do programování - Java. Cvičení č.4 Úvod do programování - Java Cvičení č.4 1 Sekvence (posloupnost) Sekvence je tvořena posloupností jednoho nebo více příkazů, které se provádějí v pevně daném pořadí. Příkaz se začne provádět až po ukončení

Více

Digitální učební materiál

Digitální učební materiál Digitální učební materiál Číslo projektu: CZ.1.07/1.5.00/34.0548 Název školy: Gymnázium, Trutnov, Jiráskovo náměstí 325 Název materiálu: VY_32_INOVACE_149_IVT Autor: Ing. Pavel Bezděk Tematický okruh:

Více

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III

Michal Krátký. Úvod do programování. Cíl kurzu. Podmínky získání zápočtu III/III Michal Krátký Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 tel.: +420 596 993 239 místnost: A1004 mail: michal.kratky@vsb.cz

Více

Implementace LL(1) překladů

Implementace LL(1) překladů Překladače, přednáška č. 6 Ústav informatiky, FPF SU Opava sarka.vavreckova@fpf.slu.cz Poslední aktualizace: 30. října 2007 Postup Programujeme syntaktickou analýzu: 1 Navrhneme vhodnou LL(1) gramatiku

Více

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmizace Dynamické programování. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Dynamické programování Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Rozděl a panuj (divide-and-conquer) Rozděl (Divide): Rozděl problém na několik podproblémů tak, aby tyto podproblémy odpovídaly původnímu

Více

Binární vyhledávací stromy pokročilé partie

Binární vyhledávací stromy pokročilé partie Binární vyhledávací stromy pokročilé partie KMI/ALS lekce Jan Konečný 30.9.204 Literatura Cormen Thomas H., Introduction to Algorithms, 2nd edition MIT Press, 200. ISBN 0-262-5396-8 6, 3, A Knuth Donald

Více

13. Třídící algoritmy a násobení matic

13. Třídící algoritmy a násobení matic 13. Třídící algoritmy a násobení matic Minulou přednášku jsme probírali QuickSort, jeden z historicky prvních třídících algoritmů, které překonaly kvadratickou složitost aspoň v průměrném případě. Proč

Více

Programování v C++, 2. cvičení

Programování v C++, 2. cvičení Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule

Více

Anotace. pointery (pars prima). Martin Pergel,

Anotace. pointery (pars prima). Martin Pergel, Anotace Základní třídicí algoritmy, jednotky oddělený překlad, pointery (pars prima). Problém třídění jednoduché třídicí algoritmy Bublinkové třídění (BubbleSort), zatřid ování alias třídění přímým vkládáním

Více

Algoritmizace prostorových úloh

Algoritmizace prostorových úloh INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Grafové úlohy Daniela Szturcová Tento

Více