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

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

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

Transkript

1 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á České vysoké učení technické v Praze Karel Richta a kol., 2018 Datové struktury a algoritmy, B6B36DSA 01/2018, Lekce 4 B6B36DSA, 2018, Lekce 4, 1/59

2 Definice problému řazení Mějme parciálně uspořádanou množinu (poset) M, kde uspořádání je binární relace M M, která je reflexivní, tranzitivní a antisymetrická. Definice problému řazení: Na vstupu je posloupnost prvků z M; cílem je najít takovou posloupnost prvků z M, pro kterou platí dvě základní kritéria: výstupní posloupnost je seřazená a výstupní posloupnost je permutací původní posloupnosti (obsahuje tedy stejná data, jen v jiném pořadí). Z hlediska řazení se vstupní data často chápou jako soubor dvojic klíč hodnota, přičemž po seřazení je posloupnost klíčů monotónní, zatímco na připojené hodnoty se při řazení nebere zřetel. Při existenci několika položek se stejným klíčem se však podle pořadí odpovídajících hodnot rozlišují stabilní a nestabilní algoritmy. V definici relace uspořádání se přitom bere ohled pouze na klíče příslušných hodnot. B6B36DSA, 2018, Lekce 4, 2/59

3 B6B36DSA, 2018, Lekce 4, 3/59

4 B6B36DSA, 2018, Lekce 4, 4/59

5 Základní taxonomie řazení Řazení bez využití porovnání (adresní řazení: radix-sort, bucket-sort) Řazení využívající porovnání (asociativní řazení): Nevyvážené dělení řazené posloupnosti: Důraz na analýzu (řazení přímým výběrem: selection sort) Důraz na syntézu (řazení přímým zatřiďováním: insertion-sort) Vyvážené dělení řazené posloupnosti: Důraz na analýzu (řazení dělením: quick-sort) Důraz na syntézu (řazení slučováním: merge-sort) B6B36DSA, 2018, Lekce 4, 5/59

6 Cvičení Navrhněte a popište algoritmus pro seřazení balíčku karet. Smíte používat jen jednu ruku a v ní smíte držet vždy nanejvýš jednu kartu. Během řazení můžete (a musíte) odkládat karty do několika pomocných balíčků. Z každého balíčku je vidět a je známa pouze hodnota vrchní karty. Úkolem je sestavit algoritmus tak, aby využíval co nejmenšího počtu pomocných balíčků. B6B36DSA, 2018, Lekce 4, 6/59

7 SELECTION-SORT řazení přímým výběrem B6B36DSA, 2018, Lekce 4, 7/59

8 SELECTION-SORT Start T O U B J R M A K D Z E min Krok 1 T O U B J R M A K D Z E A O U B J R M T K D Z E B6B36DSA, 2018, Lekce 4, 8/59

9 SELECTION-SORT min Krok 2 A O U B J R M T K D Z E A B U O J R M T K D Z E min Krok 3 A B U O J R M T K D Z E A B D O J R M T K U Z E B6B36DSA, 2018, Lekce 4, 9/59

10 SELECTION-SORT... min Krok k A B D E J K M T R U Z O A B D E J K M O R U Z T... k seřazeno A B D E J K M O R T U Z B6B36DSA, 2018, Lekce 4, 10/59

11 Pseudokód pro SELECTION-SORT Algoritmus udržuje invariant, že na začátku každé iterace ve vnější smyčce pro j obsahuje podpole A[1..j-1] j-1 nejmenších elementů v poli A[1..n] a tyto elementy jsou seřazeny podle velikosti. Po prvých n-1 krocích podpole A[1..n-1] obsahuje n-1 seřazených elementů. Proto element A[n] musí být největší element. B6B36DSA, 2018, Lekce 4, 11/59

12 for (j = 0; j < n-1; j++) { // select min smalest = j; for (i = j+1; i < n; i++) { if (a[i] < a[smalest]) { smalest = i; } } // exchange min min = a[smalest]; a[smalest] = a[j]; a[j] = min; } B6B36DSA, 2018, Lekce 4, 12/59

13 Platí požadovaný invariant? for (j = 0; j < n-1; j++) { // tady musí platit, že začátek do j-1 je seřazen smalest = j; for (i = j+1; i < n; i++) { if (a[i] < a[smalest]) { smalest = i; } } min = a[smalest]; a[smalest] = a[j]; a[j] = min; } Pro n=1 to zřejmě platí (triviálně). Předpokládejme platnost pro 1 k n a dokažme indukcí platnost pro k+1. Pomůcka: A B D E J K M T R U Z O j se nemění a[j] >= a[j-1] k j n-k min B6B36DSA, 2018, Lekce 4, 13/59

14 Platí požadovaný invariant? for (j = 0; j < n-1; j++) { } // tady musí platit, že začátek do j-1 je seřazen smalest = j; for (i = j+1; i < n; i++) { } if (a[i] < a[smalest]) { smalest = i; } min = a[smalest]; a[smalest] = a[j]; a[j] = min; Pro n=1 to zřejmě platí (triviálně). Předpokládejme platnost pro 1 k n a dokažme indukcí platnost pro k+1. Pomůcka: j se nemění a[j] >= a[j-1] A B D E J K M O R U Z T k j n-k B6B36DSA, 2018, Lekce 4, 14/59

15 SELECTION-SORT n min Krok k A B D E J K M T R U Z O k n-k Výběr minima. (n-k) testů Celkem testů n 1 (n k) n 1 n n 1 k n(n 1) n(n 1) k 1 k 1 k (n 2 n) 2 B6B36DSA, 2018, Lekce 4, 15/59

16 SELECTION-SORT Krok k A B D E J K M T R U Z O k n-k přesuny. 3 Celkem přesunů n 1 3 3(n - 1) k 1 B6B36DSA, 2018, Lekce 4, 16/59

17 SELECTION-SORT Shrnutí Celkem testů 1 2 (n 2 n) = (n 2 ) Celkem přesunů 3(n - 1) = (n) Celkem operací 1 2 (n n) + 3(n - 1) = (n 2 ) 2 Asymptotická složitost SELECTION-SORT je (n 2 ) B6B36DSA, 2018, Lekce 4, 17/59

18 INSERTION-SORT řazení přímým vkládáním B6B36DSA, 2018, Lekce 4, 18/59

19 INSERTION-SORT Start T O B K U R M A J D Z E Krok 1 T O B K U R M A J D Z E O T B K U R M A J D Z E B6B36DSA, 2018, Lekce 4, 19/59

20 INSERTION-SORT Krok 2 O T B K U R M A J D Z E B O T K U R M A J D Z E Krok 3 B O T K U R M A J D Z E B K O T U R M A J D Z E B6B36DSA, 2018, Lekce 4, 20/59

21 INSERTION-SORT... Krok k B K O R T U M A J D Z E B K M O R T U A J D Z E k... seřazeno A B D E J K M O R T U Z B6B36DSA, 2018, Lekce 4, 21/59

22 INSERTION-SORT for (j = 1; j < n; j++) { // find & make // place for a[j] insval = a[j]; i = j-1; while ((i >= 0) && (a[i] > insval)) { a[i+1] = a[i]; i--; } // insert a[j] a[i+1] = insval; } B6B36DSA, 2018, Lekce 4, 22/59

23 Korektnost algoritmu INSERTION-SORT Abychom zjistili, že algoritmus vždy dává korektní výsledky, zpravidla dokazujeme invariant algoritmu. Invariant pro INSERTION-SORT: Na začátku každé vnější iterace pro j obsahuje podpole A[1..j-1] j-1 nejmenších elementů v poli A[1..n] a tyto elementy jsou seřazeny podle velikosti. Musíme dokázat 3 věci: Počáteční krok (initialization): Invariant platí před první iterací. Indukční krok (maintenance): Pokud invariant platí před iterací, zůstane v platnosti i po iteraci (před další iterací). Terminace: Algoritmus musí po konečném počtu iterací skončit. Tyto vlastnosti zajistí, že algoritmus je korektní. B6B36DSA, 2018, Lekce 4, 23/59

24 Korektnost INSERTION-SORT Počáteční krok (initialization): před první iterací je j = 1. Proto podpole o jednom prvku a[0] je triviálně seřazeno. Indukční krok (maintenance): V podstatě se jedná o invariant vnitřního cyklu (while). Předpoklad je, že a[0..j-1] je seřazeno. Vybraný prvek a[j] je zatříděn do tohoto úseku před nejblíže větší prvek. Zřejmě tedy bude po jeho vložení seřazen i úsek a[0..j]. Terminace: Vnější cyklus skončí, když j n, tj. j = n. Navíc je úsek a[0..n] seřazen vzestupně. B6B36DSA, 2018, Lekce 4, 24/59

25 INSERTION-SORT Krok k M B K O R T U A J D Z E k testů + 1 = přesunů testů. 1 nejlepší případ k nejhorší případ (k+1)/2 průměrný případ přesunů. 2 nejlepší případ k+1 nejhorší případ (k+3)/2 průměrný případ B6B36DSA, 2018, Lekce 4, 25/59

26 INSERTION-SORT Shrnutí Celkem testů n 1 = (n) nejlepší případ (n 2 n)/2 = (n 2 ) nejhorší případ (n 2 + n 2)/4 = (n 2 ) průměrný případ Celkem přesunů 2n 2 = (n) (n 2 + n 2)/2 = (n 2 ) nejlepší případ nejhorší případ (n 2 + 5n 6)/4 = (n 2 ) průměrný případ Asymptotická složitost INSERTION-SORT je O(n 2 ) (!!) B6B36DSA, 2018, Lekce 4, 26/59

27 BUBBLE-SORT bublinkové řazení B6B36DSA, 2018, Lekce 4, 27/59

28 BUBBLE-SORT Start T O B U J R M A K D Z E Fáze 1 T O B U J R M A K D Z E O T B U J R M A K D Z E O B T U J R M A K D Z E B6B36DSA, 2018, Lekce 4, 28/59

29 BUBBLE-SORT Fáze 1 O B T U J R M A K D Z E etc O B T J R M A K D U Z E Fáze 2 O B T J R M A K D U E Z B6B36DSA, 2018, Lekce 4, 29/59

30 BUBBLE-SORT Fáze 2 B O T J R M A K D U E Z etc B O J R M A K D T U E Z Fáze 3 B O J R M A K D T E U Z B6B36DSA, 2018, Lekce 4, 30/59

31 BUBBLE-SORT Fáze 3 atd B J O M A K D R T E U Z... Fáze n-1 A B D E J K M O R T U Z n-2 seřazeno A B D E J K M O R T U Z B6B36DSA, 2018, Lekce 4, 31/59

32 BUBBLE-SORT for (lastpos = n-1; lastpos > 0; lastpos--) for (j = 0; j < lastpos; j++) if (a[j] > a[j+1]) swap(a, j, j+1); Shrnutí Celkem testů (n-1) + (n-2) = 1 2 (n 2 n) = (n 2 ) Celkem přesunů 1 2 (n 2 n) 0 = (1) = (n 2 ) nejlepší případ nejhorší případ Asymptotická složitost BUBBLE-SORT je (n 2 ) B6B36DSA, 2018, Lekce 4, 32/59

33 SHELL-SORT řazení se snižujícím se příspěvkem B6B36DSA, 2018, Lekce 4, 33/59

34 Řazení metodou SHELLSORT SHELLSORT nebo též řazení se snižujícím se přírůstkem je řadicí algoritmus založený na principu bublinkového vkládání, který objevil a v roce 1959 publikoval Donald Shell. V několika průchodech se řadí prvky od sebe stejně vzdálené pomocí bublinkového vkládání. Vzdálenost prvků od sebe (krok) se pak postupně snižuje, až je rovna jedné, tj. klasický BUBBLESORT. Bublinkové řazení porovnává a vyměňuje sousední prvky. SHELLSORT se snaží nejprve vyměnit prvky vzdálenější a teprve poté prvky bližší. Vzdálené prvky pak nemusí probublávat celým polem. Praktický problém je stanovení délky kroku. B6B36DSA, 2018, Lekce 4, 34/59

35 Implementace v Javě public static void shellsort(int[] a) { for (int krok = a.length / 2; krok > 0; krok = (krok == 2? 1 : (int)math.round(krok / 2.2))) { for (int i = krok; i < a.length; i++) { int temp = a[i]; for (int j = i; j >= krok && a[j - krok] > temp; j -= krok) { a[j] = a[j - krok]; // prohoď prvky v nesprávném a[j - krok] = temp; // pořadí } } } } B6B36DSA, 2018, Lekce 4, 35/59

36 Složitost SHELLSORT Teoretické analýzy nenašly nejvhodnější řadu snižujících se kroků. Kerninghan a Ritchie ve své implementaci používali krok n/2, který pak postupně dělili dvěma. Zde je použita úprava kroku koeficientem 2.2 podle Marcina Ciury, což se zdá vést k nejlepším výsledkům. SHELLSORT je nestabilní řadicí metoda (tj. nezachovává původní pořadí dvou prvků se stejným klíčem. Časová složitost metody SHELLSORT je přibližně rovna n 3/2. Tím se zdá být nejlepší v kategorii metod složitosti (n 2 ). B6B36DSA, 2018, Lekce 4, 36/59

37 QUICK-SORT Sir Charles Antony Richard Hoare C. A. R. Hoare: Quicksort. Computer Journal, Vol. 5, 1, (1962) B6B36DSA, 2018, Lekce 4, 37/59

38 Rozděl a Panuj! Divide & Conquer! Divide et Impera! úloha Rozděl! "jejich" práce naše práce úloha úloha úloha Vyřeš částečnou úlohu Vyřeš částečnou úlohu řešení Sluč! řešení Sluč! řešení B6B36DSA, 2018, Lekce 4, 38/59

39 QUICK-SORT Myšlenka Divide & Conquer! Start M A K D R B T O J U Z E Malá Velká M A K D R B T O J U Z Rozděl! E E A K D J B T O R U Z M Malá Velká B6B36DSA, 2018, Lekce 4, 39/59

40 QUICK-SORT Dvě samostatné úlohy E A K D J Rozděl! B T O R U Z M Rozděl! B A D K J E M O R U Z T Čtyři samostatné úlohy Rozděluj! B A D K J E Rozděl! Rozděl! M O R U Z T Rozděl! atd atd atd atd Rozděl! B6B36DSA, 2018, Lekce 4, 40/59

41 QUICK-SORT A B D E J K M O R T U Z Opanováno! B6B36DSA, 2018, Lekce 4, 41/59

42 QUICK-SORT Dělení pivot pivot Init Pivot M il ir M A K D R B T O J U Z E B6B36DSA, 2018, Lekce 4, 42/59

43 QUICK-SORT Dělení Krok 1 Pivot il ir M M A K D R B T O J U Z E il ir E A K D R B T O J U Z M B6B36DSA, 2018, Lekce 4, 43/59

44 QUICK-SORT Dělení Krok 2 Pivot M il ir E A K D R B T O J U Z M il ir E A K D J B T O R U Z M B6B36DSA, 2018, Lekce 4, 44/59

45 QUICK-SORT Dělení Pivot ir il M Krok 3 E A K D J B T O R U Z M ir il Stop Rozděl! Init Pivot E il ir E A K D J B T O R U Z M B6B36DSA, 2018, Lekce 4, 45/59

46 QUICK-SORT Dělení Krok 1 Pivot E il ir E A K D J B T O R U Z M il ir B A K D J E T O R U Z M B6B36DSA, 2018, Lekce 4, 46/59

47 QUICK-SORT Dělení Pivot E B il ir A K D J E T O R U Z M Krok 2 ir il ir il Stop B A D K J E T O R U Z M Rozděl! Init Pivot B B il ir A D K J E T O R U Z M B6B36DSA, 2018, Lekce 4, 47/59

48 QUICK-SORT Dělení Krok 1 Pivot B B il ir A D K J E T O R U Z M il ir ir il Stop Rozděl! Init Pivot B A B D K J E T O R U Z M il ir A B D K J E T O R U Z M B6B36DSA, 2018, Lekce 4, 48/59

49 QUICK-SORT Dělení Krok 1 Pivot B il == ir ir il viz kód... A B D K J E T O R U Z M Další oddíl Init Pivot K A B il ir D K J E T O R U Z M atd atd B6B36DSA, 2018, Lekce 4, 49/59

50 QUICK-SORT void qsort(item a[], int low, int high) { int il = low, ir = high; Item pivot = a[low]; do { while (a[il] < pivot) il++; while (a[ir] > pivot) ir--; if (il < ir) { swap(a,il, ir); il++; ir--; } else if (il == ir) { il++; ir--;} } while( il <= ir); K il il K D ir K ir K K D U D K } if (low < ir) qsort(a, low, ir); if (il < high) qsort(a, il, high); Rozděl! B6B36DSA, 2018, Lekce 4, 50/59

51 QUICK-SORT Levý index se nastaví na začátek zpracovávaného úseku pole, pravý na jeho konec, zvolí se pivot. Cyklus (rozdělení na malé" a velké") : Levý index se pohybuje doprava a zastaví se na prvku vetším nebo rovném pivotovi. Pravý index se pohybuje doleva a zastaví se na prvku menším nebo rovném pivotovi. Pokud je levý index ještě před pravým, příslušné prvky se prohodí, a oba indexy se posunou o 1 ve svém směru. Jinak pokud se indexy rovnají, jen se oba posunou o 1 ve svém směru. Cyklus se opakuje, dokud se indexy neprekříží, tj. pravý se dostane pred levého. Následuje rekurzivní volání (zpracování malých" a velkých" zvlášť) na úsek od začátku do pravého(!) indexu včetně a na úsek od levého(!) indexu včetně až do konce, má-li príslušný úsek délku větší než 1. B6B36DSA, 2018, Lekce 4, 51/59

52 QUICK-SORT Asymptotická složitost Celkem přesunů a testů (n log 2 (n)) (n log 2 (n)) (n 2 ) nejlepší případ průměrný případ nejhorší případ Asymptotická složitost QUICK-SORT je O(n 2 ),... ale! : Očekávaná složitost QUICK-SORT je (n log 2 (n)) (!!) B6B36DSA, 2018, Lekce 4, 52/59

53 Varianta QUICK-SORT Jedno rekurzivní volání v QUICK-SORT lze nahradit iterací (tailrecursion): B6B36DSA, 2018, Lekce 4, 53/59

54 Porovnání efektivity řazení N N 2 N log 2 (N) N 2 N log 2 (N) zpomalení (1~1sec) 3 sec 15 sec 1.5 min 13 min 1.5 hod 14 hod 5 dnů B6B36DSA, 2018, Lekce 4, 54/59

55 Stabilita řazení Stabilní řazení nemění pořadí prvků se stejnou hodnotou. Neseřazená data Hodnoty X i jsou totožné X b X c X a Seřazená data Seřaď X b X c X a B6B36DSA, 2018, Lekce 4, 55/59

56 Stabilní řazení záznam: Jméno Příjmení Vstup: seznam seřazen pouze podle jména Výstup: seznam seřazen podle jména i příjmení Andrew Andrew Andrew Barbara Barbara Barbara Charles Charles Charles Cook Amundsen Brown Cook Brown Amundsen Amundsen Cook Brown stabilní řazení seřaď záznamy pouze podle příjmení Andrew Barbara Charles Andrew Barbara Charles Andrew Barbara Charles Amundsen Amundsen Amundsen Brown Brown Brown Cook Cook Cook Pořadí záznamů se stejným příjmením se nezměnilo B6B36DSA, 2018, Lekce 4, 56/59

57 Nestabilní řazení záznam: Jméno Příjmení Vstup: seznam seřazen pouze podle jména Výstup: původní pořadí jmen je ztraceno seřazeno Andrew Andrew Andrew Barbara Barbara Barbara Charles Charles Charles Cook Amundsen Brown Cook Brown Amundsen Amundsen Cook Brown QuickSort seřaď záznamy pouze podle příjmení Barbara Andrew Charles Barbara Charles Andrew Charles Andrew Barbara Amundsen Amundsen Amundsen Brown Brown Brown Cook Cook Cook Pořadí záznamů se stejným příjmením se změnilo B6B36DSA, 2018, Lekce 4, 57/59

58 Stabilita někdy závisí na implementaci B 1 D 1 C 1 A 1 C 2 B 2 A 2 D 2 B 3 A 3 D 3 C 3 Insert Bubble -- Stabilní implementace A 1 A 2 A 3 B 1 B 2 B 3 C 1 C 2 C 3 D 1 D 2 D 3 B 1 D 1 C 1 A 1 C 2 B 2 A 2 D 2 B 3 A 3 D 3 C 3 Insert Bubble -- Nestabilní implementace QuickSort Select Sort Vždy nestabilní!! A 2 A 1 A 3 B 2 B 3 B 1 C 3 C 1 C 2 D 3 D 2 D 1 B6B36DSA, 2018, Lekce 4, 58/59

59 The End B6B36DSA, 2018, Lekce 4, 59/59

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Úvod do problematiky

Úvod do problematiky Úvod do problematiky Karel Richta a kol. Přednášky byly připraveny i 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

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

Pokročilé řazení. Karel Richta a kol. Přednášky byly připraveny s pomocí materiálů, které vyrobili Marko Berezovský a Michal Píše

Pokročilé řazení. Karel Richta a kol. Přednášky byly připraveny s pomocí materiálů, které vyrobili Marko Berezovský a Michal Píše Pokročilé řazení arel ichta a kol. Přednášky byly připraveny s pomocí materiálů, které vyrobili arko erezovský a ichal Píše atedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

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

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

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

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

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

Techniky návrhu algoritmů

Techniky návrhu algoritmů Techniky návrhu algoritmů Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2018 Datové struktury a algoritmy, B6B36DSA 01/2018, Lekce 2 https://cw.fel.cvut.cz/wiki/courses/b6b36dsa/start

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

Č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

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

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2 Euklidův algoritmus Doprovodný materiál pro cvičení Programování I. NPRM044 Autor: Markéta Popelová Datum: 31.10.2010 Euklidův algoritmus verze 1.0 Zadání: Určete největšího společného dělitele dvou zadaných

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

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

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

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

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

Principy indukce a rekursivní algoritmy

Principy indukce a rekursivní algoritmy Principy indukce a rekursivní algoritmy Jiří Velebil: A7B01MCS 19. září 2011: Indukce 1/20 Příklad Místností rozměru n budeme rozumět šachovnici rozměru 2 n 2 n, ze které je jedno (libovolné) pole vyjmuto.

Více

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT

ˇ razen ı rychlejˇ s ı neˇ z kvadratick e Karel Hor ak, Petr Ryˇsav y 20. dubna 2016 Katedra poˇ c ıtaˇ c u, FEL, ˇ CVUT řazení rychlejší než kvadratické Karel Horák, Petr Ryšavý 20. dubna 2016 Katedra počítačů, FEL, ČVUT Příklad 1 Která z následujících posloupností představuje haldu uloženou v poli? 1. 9 5 4 6 3 2. 5 4

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

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

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

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

Matematická indukce a správnost programů. Základy diskrétní matematiky, BI-ZDM ZS 2011/12, Lekce 13

Matematická indukce a správnost programů. Základy diskrétní matematiky, BI-ZDM ZS 2011/12, Lekce 13 Matematická indukce a správnost programů doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky FIT České vysoké učení technické v Praze c Josef Kolar, 2011 Základy diskrétní matematiky, BI-ZDM ZS

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

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

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

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

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

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

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

Složitost algoritmů. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol. Složitost algoritmů Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol., 2017 Datové struktury a algoritmy, B6B36DSA 02/2017, Lekce 3

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

IB111 Úvod do programování 1 / 62

IB111 Úvod do programování 1 / 62 Vyhledávání, řazení, složitost IB111 Úvod do programování 2016 1 / 62 Výpočet odmocniny vstup: číslo x výstup: přibližná hodnota x Jak na to? 2 / 62 Výpočet odmocniny vstup: číslo x výstup: přibližná hodnota

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 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

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615)

IB108 Sada 1, Příklad 1 Vypracovali: Tomáš Krajča (255676), Martin Milata (256615) IB108 Sada 1, Příklad 1 ( ) Složitost třídícího algoritmu 1/-Sort je v O n log O (n.71 ). Necht n = j i (velikost pole, které je vstupním parametrem funkce 1/-Sort). Lehce spočítáme, že velikost pole předávaná

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

Šablony, kontejnery a iterátory

Šablony, kontejnery a iterátory 7. října 2010, Brno Připravil: David Procházka Šablony, kontejnery a iterátory Programovací jazyk C++ Šablony Strana 2 / 21 Šablona funkce/metody Šablona je obecný popis (třídy, funkce) bez toho, že by

Více

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010

Pokročilé haldy. prof. Ing. Pavel Tvrdík CSc. Fakulta informačních technologií České vysoké učení technické v Praze c Pavel Tvrdík, 2010 Pokročilé 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í algoritmy (I-EFA) ZS 2010/11,

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

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2 PI JE JEDNODUCHÝ IMPERATIVNÍ PROGRAMOVACÍ JAZYK OBSAHUJE PODPORU ANOTACÍ NEOBSAHUJE NĚKTERÉ TYPICKÉ KONSTRUKTY PROGRAMOVACÍCH JAZYKŮ JAKO JSOU REFERENCE, UKAZATELE, GLOBÁLNÍ PROMĚNNÉ PODOBÁ SE JAZYKU C

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

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

Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto

Na začátku rozdělíme práci a určíme, které podproblémy je potřeba vyřešit. Tyto Kapitola 1 Rozděl a panuj Rozděl a panuj je programovací metoda. Často se označuje latinsky Divide et Empera nebo anglicky Divide and Conquer. Vychází z toho, že umíme zadaný problém rozložit na menší

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

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

R zné algoritmy mají r znou složitost

R zné algoritmy mají r znou složitost / / zné algoritmy mají r znou složitost Dynamické programování / / Definice funkce Otázka Program f(x,y) = (x = ) (y = ) f(x, y-) + f(x-,y) (x > ) && (y > ) f(,) =? int f(int x, int y) { if ( (x == ) (y

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

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA STROJNÍHO INŽENÝRSTVÍ ÚSTAV AUTOMATIZACE A INFORMATIKY FACULTY OF MECHANICAL ENGINEERING INSTITUTE OF AUTOMATION AND COMPUTER SCIENCE

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

Dijkstrův algoritmus

Dijkstrův algoritmus Dijkstrův algoritmus Hledání nejkratší cesty v nezáporně hranově ohodnoceném grafu Necht je dán orientovaný graf G = (V, H) a funkce, která každé hraně h = (u, v) H přiřadí nezáporné reálné číslo označované

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

Elegantní algoritmus pro konstrukci sufixových polí

Elegantní algoritmus pro konstrukci sufixových polí Elegantní algoritmus pro konstrukci sufixových polí 22.10.2014 Zadání Obsah Zadání... 3 Definice... 3 Analýza problému... 4 Jednotlivé algoritmy... 4 Algoritmus SA1... 4 Algoritmus SA2... 5 Algoritmus

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

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů ÚVODNÍ ZNALOSTI datové struktury správnost programů analýza algoritmů Datové struktury základní, primitivní, jednoduché datové typy: int, char,... hodnoty: celá čísla, znaky, jednoduché proměnné: int i;

Více

2. lekce Algoritmus, cyklus Miroslav Jílek

2. lekce Algoritmus, cyklus Miroslav Jílek 2. lekce Algoritmus, cyklus Miroslav Jílek 1/36 Algoritmus 2/36 Algoritmus je konečná posloupnost operací, která dává řešení skupiny problémů 3/36 Algoritmus je konečná posloupnost operací, která dává

Více

Různé algoritmy mají různou složitost

Různé algoritmy mají různou složitost / 1 Různé algoritmy mají různou složitost 1/ 1 Rychlost... Jeden algoritmus (program, postup, metoda ) je rychlejší než druhý. Co ta věta znamená?? 2/ 1 Asymptotická složitost y y x x Každému algoritmu

Více

IB002 Algoritmy a datové struktury I

IB002 Algoritmy a datové struktury I IB002 Algoritmy a datové struktury I Ivana Černá Fakulta informatiky, Masarykova univerzita Jaro 2016 IB002 Algoritmy a datové struktury I () Jaro 2016 1 / 88 Informace o předmětu vyučující předmětu Ivana

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

Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.

Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty. Zpracoval: hypspave@fel.cvut.cz 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty. (A7B01MCS) I. Matematická indukce a rekurse. Indukční principy patří

Více

Základy algoritmizace. Hašování

Základy algoritmizace. Hašování Základy algoritmizace Hašování Problematika hašování Hašování - nástroj na jednoduchý způsob "zakódování vstupních dat. Vstupní data jsou zpracována hašovací funkcí jsou jistým způsobem komprimována. Relativně

Více

IB111 Základy programování Radek Pelánek 1 / 61

IB111 Základy programování Radek Pelánek 1 / 61 Vyhledávání, řazení, složitost IB111 Základy programování Radek Pelánek 2017 1 / 61 ... ale nejdřív Praktické rady: čtení chybových hlášek časté chyby 2 / 61 Čtení chybových hlášek Traceback (most recent

Více

Dynamické programování. Optimální binární vyhledávací strom

Dynamické programování. Optimální binární vyhledávací strom The complexity of different algorithms varies: O(n), Ω(n ), Θ(n log (n)), Dynamické programování Optimální binární vyhledávací strom Různé algoritmy mají různou složitost: O(n), Ω(n ), Θ(n log (n)), The

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

SORT STABILITY

SORT STABILITY Níže uvedené úlohy představují přehled otázek, které se vyskytly v tomto nebo v minulých semestrech ve cvičení nebo v minulých semestrech u zkoušky. Mezi otázkami semestrovými a zkouškovými není žádný

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

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

Ú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

Rekurentní rovnice, strukturální indukce

Rekurentní rovnice, strukturální indukce Rekurentní rovnice, strukturální indukce Jiří Velebil: A7B01MCS 26. září 2011: 1/20 Příklad (Parketáž triminy z minulé přednášky) P(n) = počet parket k vyparketování místnosti rozměru n 1 P(1) = 1. 2 P(n

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

TGH05 - aplikace DFS, průchod do šířky

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 28. března 2017 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

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

TGH05 - aplikace DFS, průchod do šířky

TGH05 - aplikace DFS, průchod do šířky TGH05 - aplikace DFS, průchod do šířky Jan Březina Technical University of Liberec 31. března 2015 Grafová formulace CPM (critical path method) Orientovaný acyklický graf (DAG) je orientovaný graf neobsahující

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

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

Stanovisko Rady STM k předmětu DSA

Stanovisko Rady STM k předmětu DSA Stanovisko Rady STM k předmětu DSA A. Úvod Na základě studentských podnětů a žádosti proděkana fakulty pro bakalářské studium, doc. Ivana Jelínka, se Rada STM opakovaně zabývala průběhem výuky předmětu

Více

a) b) c) Radek Mařík

a) b) c) Radek Mařík 2012-03-20 Radek Mařík 1. Čísla ze zadané posloupnosti postupně vkládejte do prázdného binárního vyhledávacího stromu (BVS), který nevyvažujte. Jak bude vypadat takto vytvořený BVS? Poté postupně odstraňte

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

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

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

Více

Vzdálenost uzlů v neorientovaném grafu

Vzdálenost uzlů v neorientovaném grafu Vzdálenosti a grafy Vzdálenost uzlů v neorientovaném grafu Je dán neorientovaný neohodnocený graf G = (V,E,I) vzdálenost uzlů u a v v neorientovaném souvislém grafu G je délka nejkratší cesty spojující

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