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

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

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

Transkript

1 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 arel ichta a kol., 2018 Datové struktury a algoritmy, 636DS 01/2018, Lekce DS, 2018, Lekce 7, 1/77

2 Řazení dělením - diskuse QUIC-ST 636DS, 2018, Lekce 7, 2/77

3 Diskuse k řazení dělením QUIC-ST je typický představitel řešení metodou ozděl-a-panuj. Existují varianty dvou typů: jednoduché a stabilní, které ale mají větší skryté konstanty a vyžadují (n) pomocné paměti, komplikovanější, nestabilní, ale fakticky rychlejší a nevyžadující extra paměť, tzv. in place algoritmy. lgoritmy prvního typu: Vyberou pivota. Projdou pole, označí a oindexují čísla menší, rovna a větší než pivot. Zahustí čísla menší než pivot doleva, za ně nahustí čísla rovna pivotu a za ně čísla větší než pivot. Nad první a třetí částí spustí rekurzivně totéž. lgoritmus uvedený v předchozí přednášce byl druhého typu. V obou případech záleží hodně na výběru pivota. 636DS, 2018, Lekce 7, 3/77

4 Složitost v průměrném případě Předpoklad rovnoměrného rozložení: každá z n! možných vstupních posloupností se objevuje s pravděpodobností 1/n!. Je velmi nepravděpodobné, že dělící poměr na všech úrovních bude stejný. Pravděpodobně některá dělení budou vyvážená a některá nevyvážená. odel průměrného případu: např. střídání nejlepšího (1/1) a nejhoršího dělícího průměru (1/n 1), vyjde jenom o něco hůře než nejlepší. točíme pohled: místo modelování a spekulování o dělících poměrech vnutíme vstupním datum charakter náhodné posloupnosti. Typicky: vstupní posloupnost podrobíme randomizaci (rozházení), čímž složitost řazení dělením není závislá na uspořádanosti vstupu. Potřebujeme náhodný generátor. 636DS, 2018, Lekce 7, 4/77

5 Příklad randomizovaného QUIC-ST ějme funkci andom(a, b), která vrátí celé číslo c, a c b, s pravděpodobností 1/(b a+1). Pak randomizovaný QUIC-ST používá: function SelectandomPivot(, low, high) { i andom(low, high); [i] [low]; return [low] } 636DS, 2018, Lekce 7, 5/77

6 Diskuse k řazení dělením (pokr.) Časová složitost v nejhorším případě (n 2 ). Časová složitost v průměrném (a očekávaném) případě (n log n). Nízká multiplikativní konstanta. Potřebuje případně jen konstantní prostor navíc. Správnost = částečná správnost + terminace Částečná správnost (invariant)? Terminace? 636DS, 2018, Lekce 7, 6/77

7 Řazení pomocí haldy HEP-ST 636DS, 2018, Lekce 7, 7/77

8 Halda Halda (binární) D J T E Z U Pravidlo haldy (INHEP) b a c a b a c 636DS, 2018, Lekce 7, 8/77

9 Halda Terminologie b a c a... predecessor, parent of b c... předchůdce, rodič b, c... successor, child of a... následník, potomek... (heap) top... vrchol (haldy) D 636DS, 2018, Lekce 7, 9/77

10 Halda v poli Halda uložená v poli 1 2 D 3 r k 4 J 5 T 6 E 7 s t 2k 2k+1 Z U 12 následníci následníci k 2k 2k+1 r s t D J T E Z U 636DS, 2018, Lekce 7, 10/77

11 Vrchol odstraněn (1) 1 odstraň vrchol Datové struktury a algoritmy 1 prava haldy 3 vlož na vrchol U D D J 2 T E J T E Z U Z 2 poslední první U >, U > D, < D prohoď U 636DS, 2018, Lekce 7, 11/77

12 3 Vrchol odstraněn (2) Datové struktury a algoritmy vlož na vrchol - pokračování prava haldy U D J D J T E U T E Z Z U >, U > J, J < prohoď J U U >, U >, < prohoď U 636DS, 2018, Lekce 7, 12/77

13 Vrchol odstraněn (3) prava haldy 3 3vlož na vrchol - hotovo J D T E Z U Nová halda 636DS, 2018, Lekce 7, 13/77

14 prava haldy Vrchol odstraněn II (1) 1 odstraň vrchol 1 3 vlož na vrchol J D J D T E T E Z U Z U 2 poslední první > J, > D, D < J prohoď D 636DS, 2018, Lekce 7, 14/77

15 prava haldy 3 Vrchol odstraněn II (2) Vrchol odstraněn II (3) vlož na vrchol - pokračování D 3 vlož na vrchol - hotovo D J J E T E T Z U Z U < T, > E prohoď E Nová halda 636DS, 2018, Lekce 7, 15/77

16 Řazení pomocí haldy - HEP-ST I Neseřazeno J U Z T E D II Vytvoř haldu III for (i = 0; i < n; i++) a[i] = odstraň vrchol ; D J T E J E D Z U Z T U IV Seřazeno Z U T J E D 636DS, 2018, Lekce 7, 16/77

17 ekurzivní vlastnost býti haldou D J T E Z U je halda je halda a je halda 636DS, 2018, Lekce 7, 17/77

18 Vytvoř jednu haldu ze dvou menších Z halda halda není (ještě) halda Z > nebo Z > prohoď: Z min(,) 636DS, 2018, Lekce 7, 18/77

19 Vytvoř jednu haldu ze dvou menších Z F C halda halda není halda není halda halda 636DS, 2018, Lekce 7, 19/77

20 Vytvoř haldu 6 1 Vytvoř haldu zde vytvoř haldu zde... J 3 2 Z T 1 U E 3 4 vytvoř haldu zde... vytvoř haldu zde... 5 vytvoř haldu zde... D 6 vytvoř haldu zde, celá halda je hotova. 636DS, 2018, Lekce 7, 20/77

21 Halda v poli Halda uložená v poli 1 2 D 3 r k 4 J 5 T 6 E 7 s t 2k 2k+1 Z U 12 následníci následnící k 2k 2k+1 r s t D J T E Z U 636DS, 2018, Lekce 7, 21/77

22 arel ichta a kol. (ČVUT FEL) 636DS, 2018, Lekce 7, 22/77 Pokročilé řazení Datové struktury a algoritmy D E J T U Z D E J T U Z Není halda Neseřazeno Tvorba haldy v poli

23 arel ichta a kol. (ČVUT FEL) 636DS, 2018, Lekce 7, 23/77 Pokročilé řazení Datové struktury a algoritmy D E J T U Z D E J T U Z D E J T U Z D E J T U Z D E J T U Z tvorba haldy: Tvorba haldy v poli

24 arel ichta a kol. (ČVUT FEL) 636DS, 2018, Lekce 7, 24/77 Pokročilé řazení Datové struktury a algoritmy D E J T U Z D E J T U Z D E J T U Z Tvorba haldy 6 Halda Tvorba haldy v poli

25 HEP-ST Halda D J T E Z U rok 1 D J T E Z U U D J T E Z J D T E Z U Halda 636DS, 2018, Lekce 7, 25/77

26 HEP-ST rok k J T U Z E D Z T U J E D Z T U J E D halda k 636DS, 2018, Lekce 7, 26/77

27 HEP-ST // array: a[1]...a[n]!!!! void heapsort(item a[], int n) { int i, j, // create a heap for (i = n/2; i > 0; i--) repairtop(array, i, n); } // sort for (i = n; i > 1; i--) { swap(a, 1, i); repairtop(array, 1, i-1); } 636DS, 2018, Lekce 7, 27/77

28 // array: a[1]...a[n]!!!!!! void repairtop(item a[], int top, int bott) { int i = top; // a[2*i] and a[2*i+1] int j = i*2; // are successors of a[i] Item topval = a[top]; EPITP pro HEP-ST // try to find a successor < topval if ((j < bott) && (a[j] > a[j+1])) j++; } // while (successors < topval) // move successors up while ((j <= bott) && (topval > a[j])) { a[i] = a[j]; i = j; j = j*2; // skip to next successor if ((j < bott) && (a[j] > a[j+1])) j++; } a[i] = topval; // put the topval 636DS, 2018, Lekce 7, 28/77

29 Shrnutí pro HEP-ST repairtop operace nejhorší případ... log 2 (n) (n=velikost haldy) vytvoř haldu... n/2 repairtop operací log 2 (n/2) + log 2 (n/2+1) log 2 (n) (n/2)(log 2 (n)) = (n log 2 (n)) seřaď haldy... n-1 repairtop operací, nejhorší případ: log 2 (n) + log 2 (n-1) n log 2 (n) = (n log 2 (n)) ale i nejlepší případ = celkem... vytvoř haldu + seřaď haldu = (n log 2(n)) (n log 2 (n)) symptotická složitost HEP-ST je (n log 2 (n)) HEP-ST není stabilní 636DS, 2018, Lekce 7, 29/77

30 Řazení slučováním EGE-ST 636DS, 2018, Lekce 7, 30/77

31 Slučování posloupností Sluč (slij?) dvě seřazená pole porovnávané prvky T U Z D E J T U Z D E J T U Z D E J 636DS, 2018, Lekce 7, 31/77

32 Slučování posloupností Sluč dvě seřazená pole - pokr. T U Z D D E J T U Z D E D E J T U Z D E J D E J 636DS, 2018, Lekce 7, 32/77

33 Slučování posloupností Sluč dvě seřazená pole - pokr. T U Z D E J D E J T U Z D E J D E J T U Z D E J D E J 636DS, 2018, Lekce 7, 33/77

34 Sluč dvě seřazená pole - pokr. Slučování posloupností kopíruj zbytek T U Z D E J D E J Seřazeno T U Z D E J T U Z D E J 636DS, 2018, Lekce 7, 34/77

35 ozděl a Panuj! Divide & Conquer! Divide et Impera! úloha ozdě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í 636DS, 2018, Lekce 7, 35/77

36 EGE-ST Neseřazeno Z U T E J D ozděl! Z U T E J D Zpracuj odděleně Process seřaď! seřaď! separatel y T U Z D E J Panuj! Seřazeno Sluč! D E J T U Z 636DS, 2018, Lekce 7, 36/77

37 EGE-ST Neseřazeno Z U T E J D ozděl! ozděl! Z U T E J D ozděl! Sluč! Sluč! Sluč! Seřazeno U Z T E J D T U Z D E J 636DS, 2018, Lekce 7, 37/77

38 EGE-ST void mergesort (int a[], int aux[], int low, int high) { int half = (low+high)/2; int i; if (low >= high) return; // too small! // sort mergesort(a, aux, low, half); // left half mergesort(a, aux, half+1, high); // right half merge(a, aux, low, high); // merge halves // put result back to a for (i = low; i <= high; i++) a[i] = aux[i]; // optimization idea: /* swaprray(a, aux) */ // better to swap // references to a & aux! } 636DS, 2018, Lekce 7, 38/77

39 EGE-ST void merge(int in[], int out[], int low, int high) { int half = (low+high)/2; int i1 = low; int i2 = half+1; int j = low; } // compare and merge while ((i1 <= half) && (i2 <= high)) { if (in[i1] <= in[i2]) { out[j] = in[i1]; i1++; } else { out[j] = in[i2]; i2++; } j++; } // copy the rest while (i1 <= half) { out[j] = in[i1]; i1++; j++; } while (i2 <= high) { out[j] = in[i2]; i2++; j++; } 636DS, 2018, Lekce 7, 39/77

40 symptotická složitost EGE-ST ozděl!... Sluč!... log 2 (n) log 2 (n) krát krát ozděl!... (1) operací Sluč!... (n) operací Celkem... (n) (log 2(n)) = (n log 2 (n)) operací symptotická složitost EGE-ST je (n log 2 (n)) 636DS, 2018, Lekce 7, 40/77

41 Stabilita EGE-ST ozděl!... Nepohybuje prvky Sluč!... if (in[i1] <= in[i2]) { out[j] = in[i1]; Zařaď nejprve levý prvek když slučuješ stejné hodnoty EGE-ST je stabilní 636DS, 2018, Lekce 7, 41/77

42 ptimalita algoritmů řazení Definice: lgoritmus je optimální, pokud má v nejhorším případě složitost rovnou asymptoticky spodní mezi složitosti řešení daného problému. Věta: Spodní mez složitosti asociativního řešení problému řazení n čísel je (n log n). sociativní řazení využívá porovnání a případného přesunu (tzv. CE operace Compare and Exchange). Důkaz: Uvažujme pouze vstupy s n různými čísly = a1,.., an>. Libovolný CE algoritmus S lze abstraktně popsat pomocí rozhodovacího stromu S(S, n): aždý vnitřní uzel stromu odpovídá CE(a i, a j ) pro nějaká 1 i j n. Levý podstrom diktuje následné CE operace, pokud a i a j nebo je to list stromu. Pravý podstrom diktuje následné CE operace, pokud a i > a j nebo to je list stromu. 636DS, 2018, Lekce 7, 42/77

43 Příklad rozhodovacího stromu pro n=3 636DS, 2018, Lekce 7, 43/77

44 ptimalita algoritmů řazení (pokr.) Důkaz (pokr.): aždý list odpovídá právě jedné permutaci (), kde: a (1) a (2) a (n). aždému provedení algoritmu S odpovídá právě jeden průchod stromem z kořene do nějakého listu. Pro libovolný algoritmus S je odpovídající strom plný binární strom s n! listy - jeho hloubka je nejméně log(n!) = (n log n). Důsledek: lgoritmy erge-sort v každém případě, Heap-Sort v nejhorším a Quick- Sort v průměrném případě jsou optimální. Poznámka: log(n!) = log(n*(n-1)* *1) = log(n)+log(n-1)+ +log(1) n log n log(n!) = (n log n) log(n!) log(n/2)+ +log(n) = n/2 * log n/2 log(n!) = (n log n) log(n!) = (n log n) log(n!) = (n log n) log(n!) = (n log n) 636DS, 2018, Lekce 7, 44/77

45 Speciální algoritmy řazení v čase (n) Vzhledem k výše popsané nepřekročitelné mezi (n log n) lze seřadit n čísel v čase menším, pouze pokud: Je na vstupní hodnoty uvalena dodatečná omezující podmínka a díky tomu můžeme využít nějaké sofistikované vylepšení. Řazení není založeno na porovnání (operaci CE - složitost algoritmu se počítá pomocí základních operací). Uvedeme si 3 takové algoritmy: DIX-ST CUNTING-ST UCET-ST 636DS, 2018, Lekce 7, 45/77

46 Číslicové řazení DIX-ST 636DS, 2018, Lekce 7, 46/77

47 Neseřazeno DIX-ST řaď podle 3. znaku Cbb DaD adb DCa CCC add DDb adc bbc bab DbD Cba acb a b C D DCa Cba Cbb 3 adb 7 DDb 10bab 13aCb CCC adc bbc DaD add DbD DS, 2018, Lekce 7, 47/77

48 DIX-ST Seřazeno od 3. znaku DCa Cba Cbb adb DDb bab acb CCC adc bbc DaD add DbD 6 11 _ a b C D_ bab DaD 1 2 řaď podle 2. znaku Cba Cbb bbc DbD DCa acb CCC adb DDb adc add DS, 2018, Lekce 7, 48/77

49 DIX-ST Seřazeno od 2. znaku bab DaD Cba Cbb bbc DbD DCa acb CCC adb DDb adc add a b C D acb adb adc add řaď podle 1. znaku bab bbc Cba Cbb CCC DaD DbD DCa DDb seřazeno! DS, 2018, Lekce 7, 49/77 lgoritmus a program není totéž

50 Neseřazeno Implementace DIX-ST seřazeno dle 3. znaku pomocná pole indexů Cbb DaD adb DCa CCC add DDb adc bbc bab DbD Cba acb 4 12 a DCa Cba b 1 Cbb 3 adb 7 DDb 10bab 13aCb Příklad C CCC adc bbc D DaD add DbD 636DS, 2018, Lekce 7, 50/ a b C D zač. & konec Příklad další

51 Příklad běhu DIX-ST 636DS, 2018, Lekce 7, 51/77

52 Pseudokód DIX-ST 636DS, 2018, Lekce 7, 52/77

53 orektnost DIX-ST Věta: lgoritmus DIX-ST řadí vstupní čísla správně a je stabilní. Důkaz: Indukcí podle čísla pozice. Dokážeme indukční hypotézu: Po provedení i iterací for cyklu platí, že vstupní pole hodnot ořezaných na nižších i-pozicích je správně seřazené. Základ indukce: Platí evidentně pro první iteraci, kdy se nahoru přesunou čísla končící číslicí 0, pak následují čísla končící číslicí 1, atd. Indukční krok: Předpokládejme, že uvedené tvrzení platí pro j, 1 j < k. Řazení v (i = j + 1)-té iteraci posouvá směrem nahoru nejprve čísla mající na pozici i číslici 0. Protože tato čísla oříznutá na posledních i 1 pozic byla v předchozích iteracích seřazena správně, bude tato skupina čísel oříznutých na i pozic také seřazena správně. Pak bude podobným způsobem následovat skupina čísel, majících na pozici i číslici 1, po té číslicí 2, atd. Po skončení i-té iterace cyklu budou tedy čísla oříznutá na i pozic seřazena správně. 636DS, 2018, Lekce 7, 53/77

54 Shrnutí: DIX-ST d znaků... d cyklů cyklus... celkem... (n) operací (d n) operací d << n... (n) operací Číslicové řazení nemění pořadí stejných hodnot symptotická složitost adix sortu je (n) Je to stabilní řazení 636DS, 2018, Lekce 7, 54/77

55 Řazení čítáním CUNTING-ST 636DS, 2018, Lekce 7, 55/77

56 CUNTING-ST vstup vstup.length == N četnost cetnost.length == k k = max(vstup) - min(vstup) výstup vstup.length == N DS, 2018, Lekce 7, 56/77

57 CUNTING-ST rok 1 vynulování pole četností jeden průchod vstupním polem naplnění pole četností 636DS, 2018, Lekce 7, 57/77

58 CUNTING-ST rok 2 jeden průchod úprava pole četností for(i = dez+1; i <= hez; i++) cetnost[i] += cetnost[i-1] Prvek cetnost[ j ] obsahuje pozici posledního prvku s hodnotou j v budoucím výstupním poli DS, 2018, Lekce 7, 58/77

59 rok 3 i == N CUNTING-ST for(i = N; i > 0; i--) { vystup[cetnost[vstup[i]] = vstup[i]; cetnost[vstup[i]]--; } i == DS, 2018, Lekce 7, 59/77

60 rok 3 i == N-1 CUNTING-ST for(i = N; i > 0; i--) { vystup[cetnost[vstup[i]] = vstup[i]; cetnost[vstup[i]]--; } i == DS, 2018, Lekce 7, 60/77

61 rok 3 i == N-2 CUNTING-ST for(i = N; i > 0; i--) { vystup[cetnost[vstup[i]] = vstup[i]; cetnost[vstup[i]]--; } i == atd DS, 2018, Lekce 7, 61/77

62 rok 3 i == 3 CUNTING-ST for(i = N; i > 0; i--) { vystup[cetnost[vstup[i]] = vstup[i]; cetnost[vstup[i]]--; } i == atd DS, 2018, Lekce 7, 62/77

63 Shrnutí pro CUNTING-ST rok 1... (N) operací rok 2... (k) operací rok 3... (N) operací Celkem... (k + N) operací Pokud k N, je asymptotická složitost CUNTING-ST (N) CUNTING-ST je stabilní N je velikost vstupního pole, k je velikost intervalu, v němž všechny vstupní hodnoty leží. 636DS, 2018, Lekce 7, 63/77

64 Přihrádkové řazení UCET-ST 636DS, 2018, Lekce 7, 64/77

65 UCET-ST Vstupní čísla jsou z intervalu [0, 1). lgoritmus je vhodný, pokud jsou vstupní čísla rovnoměrně rozložena v tomto intervalu. Hlavní myšlenky: Interval [0, 1) rozdělíme na n přihrádek, do kterých vstupní pole distribuujeme. Díky předpokladu rovnoměrnosti rozdělení předpokládáme, že do jedné přihrádky spadne málo čísel. Nicméně, protože velikost přihrádky nelze dopředu přesně určit, je implementována jako dynamický zřetězený seznam. aždou přihrádku rychle seřadíme a výsledek dostaneme zřetězením seřazených přihrádek. 636DS, 2018, Lekce 7, 65/77

66 Příklad běhu UCET-ST 636DS, 2018, Lekce 7, 66/77

67 Příklad běhu UCET-ST (pokr.) 636DS, 2018, Lekce 7, 67/77

68 orektnost a stabilita UCET-ST Věta: lgoritmus UCET-ST řadí vstupní čísla správně a je stabilní. Důkaz: Uvažujme 2 vstupní hodnoty [i] a [j]. Pokud padnou do stejné přihrádky, pak jsou v ní seřazeny a objeví se na výstupu ve správném pořadí. Dvě stejné vstupní hodnoty díky stabilnosti řazení v přihrádkách nezmění pořadí. Nechť padnou do různých přihrádek [i ] a [j ]. Nechť i < j. Funkce f(x) = n * x je ale neklesající funkce: f(x) < f(y) x < y. Čili: i = n * [i] < j = n * [j] [i] < [j]. 636DS, 2018, Lekce 7, 68/77

69 Shrnutí pro UCET-ST symptotická časová složitost UCET-ST je v nejhorším případě (n 2 ), kde n je délka řazené posloupnosti. Průměrná očekávaná časová složitost je (n + k), kde k je počet přihrádek. Pokud k n, pak průměrná očekávaná složitost je (n). symptotická paměťová složitost v nejhorším případě je (n*k). UCET-ST je stabilní (pokud je stabilní řazení v přihrádkách) 636DS, 2018, Lekce 7, 69/77

70 ŘZENÍ N VNĚJŠÍCH ÉDIÍCH 636DS, 2018, Lekce 7, 70/77

71 Řazení na vnějších médiích etody řazení lze rozlišit na tzv. vnitřní řazení (řazení v paměti) a tzv. vnější řazení (využívající vnější média). Vnější řazení lze dále rozlišit na práci s médii se sekvenčním přístupem (páska) a náhodným přístupem (disk). Základním principem řadících metod na vnějších, sekvenčně organizovaných paměťových médiích, je řazení slučováním (merging). Pro řazení na vnějších médiích s náhodným přístupem se využívají -stromy, příp. řazení dělením. 636DS, 2018, Lekce 7, 71/77

72 etoda přímého slučování (STIGHT-EGING) Tato metoda potřebuje kromě souboru, v němž jsou řazená data, dva další pomocné soubory. V prvním kroku se data původního (zdrojového) souboru rozdělí rovnoměrně do dvou pomocných souborů. Ve druhém kroku se přečte z každého pomocného souboru jeden prvek, vytvoří se uspořádaná dvojice, která se uloží do zdrojového souboru. Tato akce se opakuje až se ze všech údajů vytvoří soubor uspořádaných dvojic. Ve třetím kroku se uspořádané dvojice rozdělí rovnoměrně do dvou pomocných souborů. Ve čtvrtém kroku se ze dvou souborů seřazených dvojic vytvoří soubor seřazených čtveřic atd. Tento cyklus se opakuje pro všechny 2 k -tice až po k, pro něž platí, že 2 k+1 >=n. Jako poslední sloučíme poslední 2 k -tici a zbývající seřazenou posloupnost ve druhém souboru. Protože typickou implementací vnějšího sekvenčního souboru je magnetická páska, říká se této metodě také přímá metoda tří pásek. 636DS, 2018, Lekce 7, 72/77

73 Schéma postupu třípáskových metod Fáze rozdělování Fáze slučování PP PP PP ZP ZP ZP ZP PP PP PP ZP zdrojová páska, PP pomocná páska 636DS, 2018, Lekce 7, 73/77

74 lgoritmus řazení přímým slučováním ozděl prvky souboru f 1 do pomocných souborů f 2 a f 3 ; n :=0; repeat i :=0; Sloučením posloupností o délce 2 n z pásek f 2 a f 3 vytvoř posloupnosti o délce 2 n+1 a ulož je do souboru f 1. S každou vytvořenou posloupností zvyš i o 1. if i>1 then ozděl posloupnosti o délce 2 n+1 ze souboru f 1 do souborů f 2 a f 3 until i=1; 636DS, 2018, Lekce 7, 74/77

75 Přirozené slučování (natural merging) Na rozdíl od předchozí přímé metody tří pásek, přirozená metoda slučování pomocí tří pásek nevytváří seřazené posloupnosti o délce 2 n při vzrůstajícím n, ale využívá počátečního uspořádání řazeného souboru. V první fázi rozdělování zapisuje střídavě do dvou pomocných souborů celé neklesající posloupnosti. Dále se již střídá fáze slučování a rozdělování s tím, že při slučování algoritmus musí rozeznat konec neklesající posloupnosti. Proces končí sloučením posledních dvou posloupností do zdrojového souboru. Přirozená metoda čtyř pásek (také přirozené vyvážené slučování, angl. natural balanced merging) podobně jako u přímého slučování, zkracuje proces řazení vyloučením fází rozdělení za cenu použití dalšího pomocného souboru (pásky). V rámci slučovacího procesu se uspořádané n-tice rovnou zapisují do dvou souborů (rovnou se rozdělují). Nelze-li u čtyřpáskové metody umístit v závěrečném slučování výsledný seřazený soubor na původní zdrojovou pásku, vloží se do procesu řazení kopírovací cyklus, který umístí seřazený soubor na původní pásku. 636DS, 2018, Lekce 7, 75/77

76 Demo pro různé metody řazení 636DS, 2018, Lekce 7, 76/77

77 The End 636DS, 2018, Lekce 7, 77/77

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

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

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

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

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

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

ˇ 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

NEJKRATŠÍ CESTY I. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze NEJKRATŠÍ CESTY I Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 7 Evropský sociální fond Praha & EU: Investujeme do vaší

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

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

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

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

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

Ř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

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

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

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

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

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

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

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

Č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

Č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

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno

Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno 12 Délka výpočtu algoritmu Mimo samotné správnosti výsledku vypočteného zapsaným algoritmem je ještě jedno neméně důležité hledisko k posouzení vhodnosti algoritmu k řešení zadané úlohy. Jedná se o čas,

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

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

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

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

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

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

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

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

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

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

Ú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

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

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

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

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

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

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

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

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

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

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

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

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2.

Zdůvodněte, proč funkce n lg(n) roste alespoň stejně rychle nebo rychleji než než funkce lg(n!). Symbolem lg značíme logaritmus o základu 2. 1 3 4 5 6 7 8 9 10 11 1 13 14 15 16 17 18 19 0 1 3 4 5 6 7 8 9 30 31 3 Zdůvodněte, proč funkce f(n) = n log(n) 1 n 1/ roste rychleji než funkce g(n) = n. Zdůvodněte, proč funkce f(n) = n 3/ log(n) roste

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

Vyhodnocování dotazů slajdy k přednášce NDBI001. Jaroslav Pokorný MFF UK, Praha

Vyhodnocování dotazů slajdy k přednášce NDBI001. Jaroslav Pokorný MFF UK, Praha Vyhodnocování dotazů slajdy k přednášce NDBI001 Jaroslav Pokorný MFF UK, Praha pokorny@ksi.mff.cuni.cz Časová a prostorová složitost Jako dlouho trvá dotaz? CPU (cena je malá; snižuje se; těžko odhadnutelná)

Více

TGH05 - Problém za milion dolarů.

TGH05 - Problém za milion dolarů. TGH05 - Problém za milion dolarů. Jan Březina Technical University of Liberec 20. března 2012 Časová složitost algoritmu Závislost doby běhu programu T na velikosti vstupních dat n. O(n) notace, standardní

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

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

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

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek Hranová konzistence Arc consistency AC Nejprve se zabýváme binárními CSP podmínka odpovídá hraně v grafu podmínek Hrana (V i, V j ) je hranově konzistentní, právě když pro každou hodnotu x z aktuální domény

Více

Algoritmy výpočetní geometrie

Algoritmy výpočetní geometrie Algoritmy výpočetní geometrie 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

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

Algoritmy na ohodnoceném grafu

Algoritmy na ohodnoceném grafu Algoritmy na ohodnoceném grafu Dvě základní optimalizační úlohy: Jak najít nejkratší cestu mezi dvěma vrcholy? Dijkstrův algoritmus s t Jak najít minimální kostru grafu? Jarníkův a Kruskalův 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

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

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

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací.

ADT prioritní fronta. Haldy. Další operace nad haldou. Binární halda. Binomické stromy. Časová složitost jednotlivých operací. ADT prioritní fronta Haldy množina M operace Přidej(M,x) přidá prvek x do množiny M Odeber(M) odeber z množiny M prvek, který je na řadě Zásobník (LIFO), Fronta (FIFO) Prioritní fronta: Přidej(M,x) přidá

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

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

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

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika

Pokročilá algoritmizace amortizovaná složitost, Fibonacciho halda, počítačová aritmetika amortizovaná složitost, Fibonacciho halda, počítačová aritmetika Jiří Vyskočil, Marko Genyg-Berezovskyj 2009 Amortizovaná složitost Asymptotická složitost často dostatečně nevypovídá o složitosti algoritmů,

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

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

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

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr Seminář z IVT Algoritmizace Slovanské gymnázium Olomouc Tomáš Kühr Algoritmizace - o čem to je? Zatím jsme se zabývali především tím, jak určitý postup zapsat v konkrétním programovacím jazyce (např. C#)

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

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

Š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

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

Č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

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

Návrh Designu: Radek Mařík

Návrh Designu: Radek Mařík 1. 7. Najděte nejdelší rostoucí podposloupnost dané posloupnosti. Použijte metodu dynamického programování, napište tabulku průběžných délek částečných výsledků a tabulku předchůdců. a) 5 8 11 13 9 4 1

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

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky

2 Datové struktury. Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky Pole Seznam Zásobník Fronty FIFO Haldy a prioritní fronty Stromy Hash tabulky Slovníky 25 Pole Datová struktura kolekce elementů (hodnot či proměnných), identifikovaných jedním nebo více indexy, ze kterých

Více

Použití dalších heuristik

Použití dalších heuristik Použití dalších heuristik zkracování cesty při FIND-SET UNION podle hodností Datové struktury... p[x] - předchůdce uzlu x MAKE-SET(x) p[x] := x hod[x] := 0 hod[x] - hodnost (aprox. výšky) UNION(x,y) LINK(FIND-SET(x),

Více

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet.

4 Stromy a les. Definice a základní vlastnosti stromů. Kostry grafů a jejich počet. 4 Stromy a les Jedním ze základních, a patrně nejjednodušším, typem grafů jsou takzvané stromy. Jedná se o souvislé grafy bez kružnic. Přes svou (zdánlivou) jednoduchost mají stromy bohatou strukturu a

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

Datové struktury Úvod

Datové struktury Úvod Datové struktury Úvod Navrhněte co nejjednodušší datovou strukturu, která podporuje následující operace: 1. Insert a Delete v O(n), Search v O(log n); Datové struktury Úvod Navrhněte co nejjednodušší datovou

Více

Definice. B-stromu. B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí:

Definice. B-stromu. B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí: B-Strom Definice B-stromu B-strom řádu m je strom, kde každý uzel má maximálně m následníků a ve kterém platí: 1. Počet klíčů v každém vnitřním uzlu, je o jednu menší než je počet následníků (synů) 2.

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