Databáze, sítě a techniky programování X33DSP

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

Download "Databáze, sítě a techniky programování X33DSP"

Transkript

1 Databáze, sítě a techniky programování X33DSP Anotace: Náplní předmětu jsou některé techniky a metody používané ve výpočetních systémech zaměřených na biomedicínské inženýrství. Cílem je položit jednotný základ informačních technologií pro všechny studenty magisterského programu BMI a vybavit absolventy základními znalostmi v oblasti systematického přístupu k programování, správě operačních systémů a sítí i k tvorbě elementárních databázových aplikací. Předn ednáš ášej ející: Ing. Tomáš Vlček, CSc. Doc. Ing. Zdeněk Kouba, CSc. Cvičící: Mgr. Ing. David Šteiner Ing. Miloslav Radakovič Ing. Lenka Novákov ková,, PhD. 1

2 Osnova přednášek 1. Základy teorie složitosti, polynomiální a nepolynomiální problémy, neřešitelné úlohy (21.9.) 2. Státní svátek (28.9.) 3. Datové struktury, jejich implementace, rekurze (5.10.) 4. Algoritmy řazení a vyhledávání, komprimační algoritmy (12.10). 5. Grafové algoritmy (19.10.) 6. Databáze - datový model, relační model (26.10.) 7. Normální formy, dotazovací jazyk SQL (2.11.) 8. Dotazovací jazyk SQL (9.11.) 9. Transakce, distrib. databáze, replikace, synchronizace (16.11.) 10. Poč. sítě a jejich struktury, adresování, směrování v sítích (23.11.) 11. IP protokoly, porty, služby. Základy bezpečnosti v sítích. (30.11.) 12. Operační systémy I (7.12.) 13. Operační systémy II (14.12.) 14. Datové sklady, správa dokumentů, verzování (21.12.) 2

3 Podmínky udělení zápočtu a složení zkoušky Podmínky udělení zápočtu Max. 2 absence Maximální počet bodů ze cvičení je 25 (celkem 5 úloh), pro získání zápočtu min. 13 Během testu, řešení semestrální úlohy a zkoušky bude kladen důraz na zásadu samostatné práce. Podmínky zkoušky Zkouška probíhá ústně Tři otázky (algoritmy/databáze/sítě-os) Na každou otázku písemná příprava Každá otázka ohodnocena max. 25 body Pokud je odpověď na libovolnou z těchto tří otázek hodnocena méně než 10 body, celková známka je nedostatečně Výsledná známka je dána součtem bodového hodnocení cvičení a odpovědí na otázky dle platné klasifikační stupnice. 3

4 Doporučená literatura Wróblewski, Piotr: Algoritmy. Datové struktury a programovací techniky. Computer Press ISBN: Knuth, D.E.: Umění programovat. 1.díl Základní algoritmy. Computer Press ISBN: Herout, Pavel: Učebnice Jazyka Java, Kopp, Tutoriál Java - Wirth, N.: Algorithm + Data Structures = Program. Prentice- Hall, New Jersey, 1975 Louden, Kenneth, C.: Programming Languages. Principles and Practice. PWS-Kent, Massachusetts, 1993 Pokorný J., Halaška I.: Databázové systémy. Praha, ČVUT, 1998 Další publikace o DBMS aktuálně doporučí přednášející 4

5 1 Složitost algoritmů Definice algoritmu Algoritmus můžeme definovat jako jednoznačně určenou posloupnost konečného počtu elementárních kroků vedoucí k řešení daného problému, přičemž musí být splněny základní vlastnosti každého algoritmu: Hromadnost a univerzálnost - algoritmus musí vést k řešení celé třídy úloh, vzájemně se lišících pouze vstupními údaji. Determinovanost (jednoznačnost) - v každém kroku algoritmu musí být jednoznačně určeno, co je výsledkem tohoto kroku a jak má algoritmus dále pokračovat. Pro stejná vstupní data vydá algoritmus vždy stejný výsledek. Konečnost - algoritmus v konečné době skončí. Rezultativnost - algoritmus při zadání vstupních dat vždy vrátí nějaký výsledek. Korektnost - výsledek vydaný algoritmem musí být správný. Opakovatelnost při použití stejných vstupních údajů musí algoritmus dospět vždy k témuž výsledku. 5

6 1 Složitost algoritmů Ověřování správnosti algoritmu Algoritmus můžeme považovat za korektní, pokud není opomenuta žádná z možností zpracování dat při průchodu algoritmem. Algoritmus je parciálně správný, právě když platí, že pokud skončí, vydá správný výsledek. Algoritmus je konečný, když pro všechna přípustná data algoritmus po konečném počtu kroků skončí. Věta o zastavení Halting Theorem. Úloha o zastavení není algoritmicky řešitelná - neexistuje algoritmus, který by pro libovolné slovo w a libovolný algoritmus A rozhodl, zda se A při vstupu w zastaví, nebo ne. Kvantitativní ukazatele kvality algoritmů operační složitost paměťová složitost (náročnost) 6

7 1 Složitost algoritmů Příklad 1 - Sekvenční hledání 1 boolean searchlinear(value[] array, Value val) { 2 boolean ret = false; 3 for (int i = 0; i < array.length; i++) { 4 if (val == array[i]) { 5 ret = true; 6 break; 7 } 8 } 9 return ret; 10 } Operační složitost v nejhorším případě cyklus proběhne n-krát. Paměťová náročnost proměnné. 7

8 1 Složitost algoritmů Příklad 2 binární hledání 1 boolean binsearch(value[] array, Value val) { 2 boolean ret = false; 3 int l = 0; int r = array.length; int i; 4 while (!ret && r >= l) { 5 i = (l + r) / 2; 6 if (val == array[i]) { 7 ret = true; 8 } else { 9 if (val > array[i]) { 10 l = i + 1; 11 } else { 12 r = i - 1; 13 } 14 } 15 } 16 return ret; 17 } 8

9 1 Složitost algoritmů Příklad 2 binární hledání 1 boolean binsearch(value[] array, Value val) { 2 boolean ret = false; 3 int l = 0; int r = array.length; int i; 4 while (!ret && r >= l) { 5 i = (l + r) / 2; 6 if (val == array[i]) { 7 ret = true; 8 } else { 9 if (val > array[i]) { 10 l = i + 1; 11 } else { 12 r = i - 1; 13 } 14 } 15 } 16 return ret; 17 } Operační složitost v nejhorším případě cyklus proběhne log 2 (n) krát. Paměťová náročnost proměnné l, i a r. 9

10 1 Složitost algoritmů Fibonacciho posloupnost n f(n) Příklad 3 Rekurzivní výpočet Fibonacciho čísla 1 private int fib(int n) { 2 return (n == 0)?0 : ((n == 1)?1 : fib(n-1) + fib(n-2)); 3 } 10

11 1 Složitost algoritmů Fibonacciho posloupnost n f(n)

12 1 Složitost algoritmů Příklad 3 tisk posloupnosti S rekurzí: 1 public void printfib1(int n) { 2 for (int i = 1; i <= n; i++) { 3 System.out.println(i + " " + fib(i)); 4 } 5 } Neefektivní, viz strom volání fib() pro n=4 12

13 1 Složitost algoritmů Bez rekurze: 1 public void prinfib2(int n) { 2 int p0 = 1; int p1 = 1; int p; 3 for (int i = 1; i <= n; i++) { 4 System.out.println(i + " " + p0); 5 p = p1; p1 = p0 + p1; p0 = p; 6 } 7 } I p p p f(i)

14 1 Složitost algoritmů Složitost algoritmu Složitost závisí na velikosti vstupních dat, tj. můžeme popsat jako funkci T(n), kde číslo n udává velikost vstupních dat. Např. T(n) = an + b je zápis lineárníčasové složitosti. Multiplikativní konstanta a reprezentuje počet operací na jednotku vstupních dat, aditivní konstanta b udává nárůst složitosti nezávislý na velikosti vstupních dat. Pro odhad složitosti důležitý pouze typ funkční závislosti. Efektivní algoritmy - takové postupy, jejichž složitost je maximálně polynomiální (např. n 2 ), nikoliv exponenciální např. 2 n ). 14

15 1 Složitost algoritmů 15

16 1 Složitost algoritmů Čas potřebný ke zpracování dat velikosti n, jestliže výpočetní složitost je dána funkcí T(n) a provedení jedné operace trvá 1 µs T(n) n 20 µs 40 µs 60 µs 80 µs 0,1 ms n log (n) 86 µs 0,2 ms 0,35 ms 0,5 ms 0,7 ms n 2 0,4 ms 1,6 ms 3,6 ms 6,4 ms 10 ms n 3 8 ms 64 ms 0,22 s 0,5 s 1 s n 4 0,16 s 2,56 s 13 s 41 s 100 s 2 n 1 s 11,7 dne let 3, let n! let 16

17 1 Složitost algoritmů Horní odhad složitosti algoritmu T worst (n) udává složitost algoritmu v nejhorším případě: Složitost algoritmu f(n) je asymptoticky menší nebo rovna g(n), tj. f(n) = O(g(n)), právě když existuje taková kladná konstanta c tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 f(n) cg(n), neboli: Např.: 2n 2 + 3n + 4 = O(n 2 ), neboť pro n 0 = 1 a c = 10 platí 2n 2 + 3n + 4 <= 10*n 2. 17

18 1 Složitost algoritmů Dolní odhad složitosti T best (n) určuje minimální složitost daného algoritmu, která nastává jen pro určité případy vstupních dat: Složitost algoritmu f(n) je asymptoticky větší nebo rovna g(n), tj. f(n) = Ω(g(n)), právě když existuje taková kladná konstanta c tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 cg(n) f(n), neboli: Např. zápis T best (n) = Ω (n 3 ) udává kubickou dolní složitost algoritmu. 18

19 1 Složitost algoritmů Složitost v průměrném případě (očekávaná složitost) T avrg (n) se počítá jako střední hodnota náhodné složitosti T(n) při nějakém rozložení vstupních dat. Někdy může být i řádově lepší než složitost v nejhorším případě. Algoritmus je optimální pro danou úlohu, jestliže neexistuje algoritmus, který by úlohu řešil v nejhorším případě s menším počtem základních operací. Asymptoticky stejná složitost složitosti f(n), g(n) jsou asymptoticky stejné, právě když existují takové kladné konstanty c 1,c 2 tak, že pro každou velikost dat n od určité hodnoty n 0 platí: 0 c 1 g(n) f(n) c 2 g(n), neboli: 19

20 1 Složitost algoritmů Optimalizační úloha slouží k popisu úkolu nalezení řešení, které je omezeno podmínkami a které zároveň nejlépe vyhovuje daným kritériím (účelové nebo kriteriální funkci) Rozhodovací úloha je úloha, jejímžřešením je odpověď ano nebo ne. Každá optimalizační úloha lze převést na rozhodovací úlohu. Příklad - problém obchodního cestujícího. 20

21 1 Složitost algoritmů Je dána množina měst {M 1,, M n } a pro každou dvojici měst M i, M j je dána jejich přímá vzdálenost d(m i, M j ). Uvažujme trasu, která je posloupnost měst M π(1), M π(2),, M π(n), kde π je permutace čísel 1,, n. Délka této trasy je n 1 i= 1 d( M π ( i), M π( i+ 1) ) + d( M π( n), M π(1) ) Optimalizační verze: Najděte trasu nejkratší délky. Rozhodovací verze: Je dáno navíc číslo K. Rozhodněte, zda existuje trasa délky K. Řešení NPC úloha, heuristické algoritmy 21

22 1 Složitost algoritmů Nedeterministický algoritmus má dvě fáze nedeterministická, kdy se náhodně vygenerujeřetězec symbolů s deterministická, kdy na vstupu úlohy je jak instance úlohy, takřetězec s. Po konečném počtu kroků je výstupem ano nebo ne. Řetězec s je vlastně navrženéřešení úlohy, které se v deterministickéčásti otestuje, zda platí. Pro obchodního cestujícího je to číslo K. Nedeterministický algoritmus je nedeterministický polynomiální (NP algoritmus), jestliže ověřující fáze je splnitelná v polynomiálním čase vzhledem k rozsahu vstupních dat. 22

23 1 Složitost algoritmů Třída P je třída všech rozhodovacích úloh U, pro něž existuje polynomiální algoritmus, řešící U. NP úloha je taková úloha, kdy platí : pro každou ano instanci lze v polynomiálnímčase ověřit správnost odpovědi ano. Pro ne instanci takový algoritmus neexistuje. Třída NP je třída všech rozhodovacích úloh U, pro něž existuje nedeterministický algoritmus, pracující v polynomiálnímčase. 23

24 1 Složitost algoritmů Obtížnost rozhodovacích úloh se dá srovnávat. Pojem U se redukuje na V zpřesňuje sdělení, že rozhodovací úloha U není těžší než rozhodovací úloha V. U se redukuje na V, jestliže existuje algoritmus A, který pro každou instanci I úlohy U zkonstruuje instanci A(I) úlohy V tak, že I je ano instance U iff A(I) je ano instance V. Je-li A polynomiální, jde o polynomiální redukci. Rozhodovací úloha U je NP úplná, jestliže je NP úloha a každá NP úloha se na U polynomiálně redukuje. Třídu NP úplných úloh označujeme jako NPC. (NP úplné úlohy jsou nejtěžší mezi NP úlohami) 24

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

26 2 Datové struktury Pole Datová struktura kolekce elementů (hodnot či proměnných), identifikovaných jedním nebo více indexy, ze kterých je adresa každého elementu spočitatelná; počet indexů koresponduje s dimenzí pole (vektor, matice, tensor) předem stanovená velikost, prvky stejné velikosti přímý přístup na prvek pomocí indexu v konstatním čase vyhledání a zrušení prvku: O(n) - nutné projít (posunout) celé pole přidání/zrušení prvku na začátku a konci: O(1) nalezení nejmenšího a největšího prvku: O(n) Setříděné pole vyhledání prvku v O(log n) smazaní prvku v O(log n), pokud je implementováno jako označení prvku za neplatný (jinak v O(n) ) přidání prvku v O(n) nalezení nejmenšího v O(1) a největšího prvku v O(n) 26

27 2 Datové struktury Spojový seznam lineární spojový seznam - dynamická datová struktura, obsahující 1+ datových položek stejného typu, které jsou navzájem lineárně provázany vzájemnýmí odkazy pomocí ukazatelů nebo referencí. Aby byl seznam lineární, nesmí existovat cykly ve vzájemných odkazech. jednosměrný seznam - každá položka odkazuje na položku následující, v obousměrném seznamu odkazuje položka na následující i předcházející položky; konec (tail) a začátek (head) seznamu označují zarážky kruhový (cyklický) seznam obsahuje cyklus, vytvořený navázáním konce a začátku seznamu Sekvenční přístup k prvkům vyhledání prvku: O(n) přidání/zrušení prvku: O(1) 27

28 2 Datové struktury Zásobník Abstraktní datový typ, charakterizován způsobem manipulace s daty LIFO (Last In, First Out) pro manipulaci se udržuje tzv. ukazatel zásobníku, který udává tzv. vrchol zásobníku (poslední přidaná položka), a (minimálně) dvě operace push a pop Typickáčasová složitost O(1) operací se snadno realizuje pomocí pole nebo lineárního (jednosměrného) spojového seznamu Typické užití zásobníku pro ukládání info a dat při volání zanořených procedur (bezpečnostní problém s buffer overflow) 28

29 2 Datové struktury Fronty FIFO abstraktní datový typ, charakterizován způsobem manipulace s daty- FIFO (First In, First Out). Typickáčasová složitost O(1) operací, realizuje se obvykle pomocí spojového seznamu Obvyklé operace: bool empty() příznak prázdná/neprázdná fronta T& front() vrací referenci na položku v čele neprázdné fronty void dequeue() odebere položku v čele neprázdné fronty void enqueue(const T& foo) zařadí argument foo na konec fronty int size() vrací počet položek ve frontě 29

30 2 Datové struktury Halda stromová datová struktura splňující vlastnost haldy: pokud je B potomek A, pak klíč(a) klíč(b). min-heap - v kořenu stromu je prvek s nejmenším klíčem, naopak max-heap. 30

31 2 Datové struktury Halda min-heap - v kořenu stromu je prvek s nejmenším klíčem, naopak max-heap. stromová datová struktura splňující vlastnost haldy: pokud je B potomek A, pak klíč(a) klíč(b). Obvyklé operace: delete-max / delete-min: odstranění kořene z max-/min-heapu increase-key, decrease-key: aktualizace klíče v max-/min-heapu insert: vložení nového klíče merge: spojení dvou heapů do jednoho nového implementace v poli: k i < k 2i+1, k i < k 2i+2 31

32 2 Datové struktury Prioritní fronty abstraktní datový typ, charakterizován způsobem manipulace s daty: InsertWithPriority vlož prvek s asociovanou prioritou GetNext: vyber prvek s nejvyšší prioritou PeekAtNext: ukaž prvek s nejvyšší prioritou, aniž by byl z fronty odstraněn Implementace pomocí lineární struktury (pole, spojový seznam) výběr z čela fronty O(1), vložení se zařazením O(n) Implementace pomocí binárního stromu(haldy) maxheap, výběr O(log n), vložení O(log n) 32

33 2 Datové struktury Stromy zákl.pojmy - kořen stromu, (vnitřní) uzly či vrcholy, listy, předek (předchůdce) a následovník, rodič a potomek, podstrom stupeň (arita) uzlu = počet přímých následovníků vnitřního uzlu stupeň stromu = maximální stupeň mezi všemi uzly stromu cesta ve stromu: délka cesty = počet hran od kořene k danému uzlu (=hloubka uzlu) délka vnitřní cesty = součet délek cest jednotlivých uzlů průměrná délka vnitřní cesty: 1 P = n. i kde n i je počet vrcholů na i-té úrovni hloubka uzlu - délka cesty od kořene k uzlu hloubka stromu / výška stromu - rovna hodnotě maximální hloubky uzlu (pro binární strom: n=2 h+1 1, tedy hloubka h=floor(log 2 n) ) I n i i 33

34 2 Datové struktury Procházení stromem do šířky procházení po hladinách (vrstvách úrovní) - prohledávání do šířky. do hloubky procházení od kořene stromu na potomky daného vrcholu po jednotlivých větvích - prohledávání do hloubky. Uspořádání metody procházení: Přímé (pre-order) uspořádání - R, A, B Vnitřní (in-order) uspořádání - A, R, B A Inverzní (post-order) uspořádání - A, B, R Dokonale vyvážený strom pro každý vrchol platí, že počet vrcholů v levém podstromu a pravém podstromu se liší nanejvýše o jedna. Vyhledávací - všechny klíče v levém podstromu jsou menší než a všechny klíče v pravém podstromu jsou větší než klíč v daném vrcholu. R B 34

35 2 Datové struktury Binární strom Orientovaný graf s jedním kořenem, z něhož existuje cesta do všech vrcholů grafu; každý vrchol má max. dva následovníky a s výjimkou kořene právě jednoho předka. Kořen předka nemá. Reprezentace - pomocí dynamické struktury (hrany reprezentovány ukazateli), pomocí pole (viz halda). B-strom vícecestný m-ární strom, se stránkovou organizací; každá stránka (až na jednu) musí obsahovat n až 2n uzlů, kde n je zvolená konstanta (= řád B-stromu) B-strom je díky této vlastnosti vyvážený, operace přidání, vyjmutí i vyhledávání tedy probíhají v logaritmickém čase (výška B-stromu min. log m n, max log m/2 n). Typické užití modifikace (B+) používají souborové systémy (NTFS, ReiserFS, XFS a JFS2) a relační databáze ukládání indexů 35

36 2 Datové struktury seznam binární strom (min-) heap insert O(1) O(log n) O(log n) findmin O(n) O(1) O(1) deletemin O(n) O(log n) O(log n) decreasekey O(1) O(log n) O(log n) delete O(n) O(log n) O(log n) merge O(1) O(m log(n+m)) O(m log(n+m)) 36

37 2 Datové struktury Skip List Přeskakovací seznam - N-vrstvá struktura, popsána 1990 (William Pugh) jako jednodušší/rychlejší alternativa k vyváženým stromům Randomizovaná varianta setříděného spojového seznamu s dodatečnými paralelními vrstvami. Paralelní seznamy přeskakují více položek. Vyhledávání začíná na nejvyšší vrstvě a přechází do nižších vrstev pokud je aktuální položka větší/rovna vyhledávanému klíči. Je-li rovna, je nalezeno, je-li aktuální položka větší, procedura se opakuje po návratu o jeden krok a přechodu do nižší vrstvy.. Operace Insert, Search, Delete jsou prováděny v čase O(log n) za podmínky dostatečného počtu vrstev 37

38 2 Datové struktury Hash (rozptylovací) tabulky Datová struktura, která používá hashovací funkci H(key) pro efektivní mapování klíče k na celéčíslo z intervalu <0, N-1> a ukládá položky (klíč, data) na vypočtené pozice H(key) Při mapování hašovací funkcí může docházet ke kolizím řešenířetězené seznamy (rozptýlené tabulky), řetězené seznamy s oblastí přetečení, otevřená adresace (sekundární hashovací fce lineární/kvadratické pokusy, double hash fce) Perfektní hashování: ke kolizím nedochází Vlastnosti: nejhorší případ - všechny klíče kolidují složitost O(n) Při faktoru naplnění A = n/n (počet položek/velikost tab.) 0,7 je očekávaná složitost O(1) Příklad H(key) = Ordinal(key) mod N 38

39 2 Datové struktury Řešení kolizí 1. řetězené seznamy tzv. rozptýlené tabulky. 2. oblast přetečení řetězený seznam je vytvářen v oblasti přetečení 3. sekundární hashovací funkce - umístění vkládaného prvku na jinou volnou pozici, kterou určíme sekundární hašovací funkcí. metoda lineárních pokusů - sekvenčně prohledává tabulku, G(i)=i ; tj. h 0 = H(k) h i = (h 0 + i) mod L, i = 1,, L-1 Prvky se shlukují kolem pozic primárních klíčů metoda kvadratických pokusů - rozptyluje prvky rovnoměrněji po celém poli, G(i)=ci 2, tj. h 0 = H(k) h i = (h 0 + ci 2 ) mod L, i > 0, c>0 metoda dvojího hashování h 0 = H(k) h i = (h 0 + j H (k)) mod L, i > 0, c>0 L... Neexistuje společný dělitel L a počet řádků (L je bezpečné), jinak se některé pozice obsazují a jiné vůbec 39

40 2 Datové struktury Slovníky Slovník je abstraktní datová struktura, skládající se z množiny unikátních klíčů a a množiny hodnot, kde každý klíč je asociován (mapován) s jednou hodnotou nebo s množinou hodnot. Základní operace: new, insert, find and delete. new() vrací slovník D find(k, D) vrací hodnotu asociovanou s klíčem k ve slovníku D insert(k, v, D) asociuje ve slovníku D klíč k s hodnotou v delete(k, D) ruší klíč k ve slovníku D Implementace binární vyhledávací stromy (AVL), skiplisty, hash tabulky aj. 40

41 2 Datové struktury Rekurze rekurzivní algoritmus volá sám sebe dokud není dosažena ukončovací podmínka Iterativní algoritmus používá opakující se konstrukce (cykly) Příklad Tree (length, angle) { Draw(length, angle); Tree(length/2, angle+delta); Tree(length/2, angle-delta); } Každý algoritmus využívající rekurzi lze přepsat do nerekurzivního tvaru (např. s použitím zásobníku) Rekurzivní datové struktury definice dynamických datových struktur (seznamy, stromy): struct node { int n; // some data struct node *ptr_next; // pointer to another struct node }; // LIST is simply a synonym for struct node * typedef struct node *LIST; 41

42 3 Algoritmy řazení Specifikace problému řazení (třídění): A... neprázdná množina prvků Posl(A)... množina všech posloupností prvků z A <a 1,...a n >... prvky množiny Posl(A) q... délka posloupnosti Posl(A), přičemž Delka(<>) = 0 a Delka(<a 1,..a n >) = n Klic(a i )... klíč prvku a i pro porovnávání prvků Posloupnost q je seřazená právě tehdy, když: 1. q < 2, nebo 2. q >=2 a současně platí: a)klic (a 1 ) <= Klic (a 2 ) a b)posloupnost <a 2,...>, která vznikne z posloupnosti q vypuštěním prvku a 1 je rovněž seřazená. 42

43 3 Algoritmy řazení Klasifikace metod řazení Dle způsobu uložení: vnitřnířazení (řazení v paměti) vnějšířazení (řazení souborů) Dle způsobu využití klíčů: adresnířazení (Klic(x) udává polohu x ve výstupu) asociativnířazení (Klic() využíván pro stanovení relativní polohy prvku ve výstupu, tj. je-li Klic(x) < Klic(y), pak ve výstupu x předchází y) Algoritmus se nazývá stabilní, pokud se relativní pořadí prvků se shodným klíčem v procesuřazení nemění. Algoritmus se nazývá přirozený, pokud algoritmus rychleji zpracuje seřazenou množinu než neseřazenou. 43

44 3 Algoritmy řazení Algoritmy vnitřního řazení základní metody Řazení výběrem nalezne vždy nejmenší z (zbývajících neseřazených) prvků a umístí na konec postupně budované posloupnosti. Řazení vkládáním v řazené posloupnosti prvků se postupně berou jednotlivé prvky a vkládají se na správné místo v budované seřazené posloupnosti. Řazení záměnou algoritmy vyberou dvojici prvků, které jsou ve špatném pořadí, a tyto prvky navzájem zamění. Řazení slučováním - vstupní posloupnost prvků rozdělí na části, které seřadí; seřazenéčásti se poté sloučí tak, aby výsledná posloupnost byla seřazená. Neexistuje ideální algoritmus pro všechna možná data, algoritmy mají různéčasové a paměťové složitosti, implementační úskalí aj. 44

45 3 Algoritmy řazení Vlastnosti běžných algoritmů vnitřního řazení * Název Časová složitost Minimum Průměrně Maximum Dodatečná paměť Stabilní Přirozená Metoda Bubble sort Bublinkovéřazení Heapsort Řazení haldou Insertion sort Řazení vkládáním Merge sort Řazení slučováním Quicksort Rychléřazení Selection sort Řazení výběrem Shell sort ** Shellovo řazení O(n) O(n²) O(n²) O(1) ano ano Záměna O(n log n) O(n log n) O(n log n) O(1) ne ne Výběr O(n) O(n²) O(n²) O(1) ano ano Vkládání O(n log n) O(n log n) O(n log n) O(n) ano ano Slučování O(n log n) O(n log n) O(n²) O(log n) ne ne Záměna O(n²) O(n²) O(n²) O(1) ano/ne ne Výběr O(n 3/2 ) O(n log² n) O(1) ne ano Vkládání * Zdroj ** Složitost závisí na parametrech algoritmu (velikosti kroku), viz Robert Sedgewick: Analysis of Shellsort and Related Algorithms 45

46 3 Algoritmy řazení Insertion Sort for i ϵ < 2, n > vlož a i na patřičné místo mezi a 1,..., a i Autor Nuno Nogueira, wikipedia.org void insertionsort(int[] arr) { int i, j, newvalue; for (i = 2; i < arr.length; i++) { newvalue = arr[i]; j = i; while (j > 0 && arr[j - 1] > newvalue) { arr[j] = arr[j - 1]; j--; } arr[j] = newvalue; } } Časová složitost O(n 2 ), nejlepší O(n) Paměťová náročnost O(1) Stabilní algortimus 46

47 3 Algoritmy řazení i= i= i= i= i= i= i= Animace: 47

48 3 Algoritmy řazení Merge Sort 1. Je-li seznam délky 0 nebo 1, je seřazen. Jinak: 2. Rozděl seznam na dva cca poloviční velikosti. 3. Seřaď každý vzniklý seznam rekurzivně. 4. Spoj dva seznamy zpět do seřazeného seznamu. Merge sort je založen na myšlence: 1. Krátký seznam se řadí menším počtem kroků než delší seznam. 2. K vytvoření seřazeného seznamu je méně kroků potřeba při spojení dvou seřazených seznamů než neseřazených. Nevýhoda - potřeba dočasného pole velikosti N. Mergesort bývá pomalejší než Quicksort nebo Heapsort. Výhoda - stabilnířadicí algoritmus, dobře se paralelizuje. Implementován standardně v Perlu, v Javě, GNU C Library). Časová složitost O(n log n) Paměťová náročnost O(n) (dočasné pole) Animace: 48

49 3 Algoritmy řazení Quick Sort 1. V poli zvolíme libovolný prvek x; 2. Hledáme zleva, dokud se nenajde prvek a i > x; 3. Hledáme zprava, dokud se nenajde prvek a j < x. 4. Tyto dva prvky zaměníme 5. Pokračujeme, dokud se hledání zleva a zprava nesetkají u prvku x. 6. Výsledkem jsou dva úseky: v levém jsou všechny prvky < x a v pravém > x. 7. Rekurzivně seřadíme levý i pravý úsek. Problém - volba pivota, při volbě mediánu je algoritmus velmi rychlý, v opačném případě se časová složitost blíží O(n 2 ). Hledání mediánu běží v lineárním čase k počtu prvků, tím je výsledná složitost O(n log 2 n) v nejhorším případě. Není stabilní. Na náhodných datech je nejrychlejší Paměťová náročnost O(log n) dána rekurzivními voláními Animace: Medián je hodnota, jež dělířadu podle velikosti seřazených výsledků na dvě stejně početné poloviny.

50 3 Algoritmy řazení Heap Sort Využití datové struktury halda (heap), s indexací od 1: Halda je posloupnost klíčů h l, h l+1,..., h n takových, že platí pro všechna i = l... n/2: h i < h 2i, h i < h 2i+1 [min-heap], resp. h i > h 2i, h i > h 2i+1 [max-heap] Přidávání do haldy: 1. Přidej prvek do spodní úrovně haldy na první místo zleva. 2. Porovnej přidaný prvek s rodičem. Jsou-li ve správném pořadí, konec. 3. Prohoď přidaný prvek s rodičem a jdi na předchozí bod Postup přidávání prvků pro max-heap 50

51 3 Algoritmy řazení Heap Sort Využití datové struktury halda (heap), s indexací od 1: Halda je posloupnost klíčů h l, h l+1,..., h n takových, že platí pro všechna i = l... n/2: h i < h 2i, h i < h 2i+1 [min-heap], resp. h i > h 2i, h i > h 2i+1 [max-heap] Odebírání kořenového prvku z haldy: 1. Nahraď kořen posledním prvkem poslední úrovně. 2. Porovnej nově umístěný prvek s potomky. Jsou-li ve správném pořadí, konec. 3. Prohoď nově umístěný prvek s potomkem a jdi na předchozí bod Postup odebírání kořene pro max-heap 51

52 3 Algoritmy řazení Heap Sort Využití datové struktury halda (heap), s indexací od 1: Halda je posloupnost klíčů h l, h l+1,..., h n takových, že platí pro všechna i = l... n/2: h i < h 2i, h i < h 2i+1 [min-heap], resp. h i > h 2i, h i > h 2i+1 [max-heap] Základní princip algoritmu heap sort: 1. Vybudujeme haldu postupným zařazováním prvků z nesetříděného pole s využitím algortimu vkládání prvku do haldy. 2. Postupně odebíráme kořenové prvky z haldy (s využitím algoritmu pro odebírání kořene) a vkládáme je do výsledného pole. 3. V případě max-heap je výsledné pole setříděno sestupně, v případě min-heap je setříděno vzestupně. 52

53 3 Algoritmy řazení Heap Sort Využití datové struktury halda (heap), s indexací od 1: Halda je posloupnost klíčů h l, h l+1,..., h n takových, že platí pro všechna i = l... n/2: h i < h 2i, h i < h 2i+1 [min-heap], resp. h i > h 2i, h i > h 2i+1 [max-heap] Je dáno pole h 1... h n, prvky h n/ h n již tvoří haldu - tvoří listy příslušného binárního stromu a nevyžadují přeuspořádání. h2 Ke stávající haldě budeme přidávat další prvky "zleva" - haldu rozšíříme v každém kroku o 1 prvek doleva, až vytvoříme n-prvkovou haldu h8 h4 h9 h10 h5 h11 h1 h6 h12 h13 třídění na místě - zaměníme prvek z kořene haldy a poslední prvek haldy h n Přeuspořádáme haldu h 1... h n-1 Postup se opakuje pro stále se zmenšující haldu. Při každém kroku je na vrcholu haldy největší ze zbývajících prvků, a ten je výměnou s posledním prvkem této menší haldy zařazen na správné pořadí v poli. Časová složitost O(n log n), paměťová náročnost O(1), není stabilní h3 h14 h7 h15 53

54 3 Algoritmy řazení I I II III IV V II III IV V atd

55 3 Algoritmy řazení Řazení v souborech přímé a přirozené slučování (Merge Tape Sort) soubor se jako celek nevejde do operační paměti sekvenční struktury, je přístupný právě jeden element každého otevřeného souboru. operace přesouvání jsou časově náročné rozdělení sloučení do usp. dvojic rozdělení sloučení do usp. čtveřic rozdělení sloučení do usp. osmic Na přímé slučování nemá žádný vliv částečné setřídění vstupní posloupnosti a délka všech uspořádaných sloučených posloupností po k-tém kroku je 2 k Přirozené slučování slučuje vždy dvě nejdelší možné uspořádané posloupnosti max.běhy 55

56 3 Algoritmy řazení 2-fázové (tzv. třípáskové) třídění: a a a c c c b b b fáze rozdělovací fáze slučovací Tvorba setříděného souboru: kmenový soubor - setříděný rozsáhlý změnový soubor - malý, možno setřídit rychle, někdy i v poli v paměti Cílový setříděný soubor vznikne pouhým slučováním. krok Modifikace - 1-fázové (tzv. čtyřpáskové) třídění: a c a c c b d b - v rámci slučovacího procesu se uspořádané n-tice rovnou distribuují na dvě pásky 56

57 3 Algoritmy vyhledávání Dokonale vyvážený strom je strom, pro jehož každý vrchol platí, že počet vrcholů v levém podstromu a pravém podstromu se liší nanejvýše o jedna. 57 Tvorba dokonale vyváženého binárního stromu o n vrcholech: zvolíme jeden vrchol za kořen vytvoříme levý podstrom s počtem vrcholů n l = n div 2 vytvoříme pravý podstrom s počtem vrcholů n r = n - n l - 1 Pravidla aplikujeme rekurzivně Binární vyhledávací strom je uspořádaný binární strom, ve kterém jsou všechny klíče v levém podstromu menší než a všechny klíče v pravém podstromu jsou větší než klíč daného vrcholu. Přetvoření existujícího dokonale vyváženého stromu na vyhledávací je však velmi nákladné. Vyžaduje prakticky úplné přeuspořádání stromu. Podmínku na dokonalé vyvážení stromu lze oslabit, pak můžeme stromy budovat již přímo jako vyhledávací. To vede na úlohu vyhledávání spojeného s přidáváním, výsledný strom je však značně nevyvážený.

58 3 Algoritmy vyhledávání Rušení vrcholů ve stromu Inverzním problémem k přidávání je rušení vrcholů. Odstraňování prvku ze stromu je mnohem složitější než jeho přidání. V binárním stromu jsou možné čtyři případy: prvek s daným klíčem se ve stromu nenachází prvek je listem - zrušení je triviální prvek má jednoho následníka - prvek se nahradí svým následníkem prvek má dva následníky - prvek se nahradí buď nejpravějším prvkem levého podstromu nebo nejlevějším prvkem pravého podstromu. V levém podstromu jsou všechny uzly s klíčem menším a v pravém s klíčem větším než klíč rušeného prvku 58

59 3 Algoritmy vyhledávání AVL-vyvážené stromy Přidávání a rušení prvků stromu způsobuje nevyvážení, dokonalé vyvážení stromu je velmi obtížné. Proto se hledaly alternativní definice vyváženosti, které by poskytovaly dostatečně efektivní vyhedávací možnosti, a byly přitom zvládnutelné. Adelson-Velskii a Landis [1962] publikovali následující kriterium vyváženosti: Binární strom je AVL-vyvážený právě tehdy, když výšky obou podstromů každého uzlu se liší nejvýše o jedna, každý podstrom je AVL vyvážený. Autoři dokázali, že na vyvážených stromech mají operace vyhledání prvku podle klíče a přidáníči vyjmutí prvku s daným klíčem asymptotickou složitost O(log n), kde n je počet vrcholů ve stromu. 59

60 3 Algoritmy vyhledávání Pro reorganizaci zavádíme transformace (rotace), které modifikují strukturu stromu, avšak zachovávají lexikografické (in-order) uspořádání: 60

61 3 Algoritmy vyhledávání Přidání vrcholu se pak skládá ze tří kroků: Prohledání stromu za účelem zjištění, zda se takový vrchol již ve stromu nenachází. Přidání vrcholu a určení vyvažovacího faktoru. Kontrola vyvažovacího faktoru ve vrcholech ve směru opačném vůči vyhledávání (směrem ke kořenu) a případné vyvážení. Operace rušení vrcholu je variací na rušení v obyčejném binárním stromu, doplněné o vyvažování 61

62 3 62

63 3 Algoritmy vyhledávání B-stromy [BAYER 1970]: B-stromřádu n tedy splňuje následující kriteria: Každá stránka obsahuje nejvýše 2n položek (=klíčů). Každá stránka s výjimkou kořene stromu obsahuje aspoň n položek. Každá stránka je buď listem stromu (a pak nemá následníky) nebo má právě m+1 následníků, kde m je skutečný počet položek ve stránce. Všechny listové stránky jsou na jedné úrovni. V nejlepším případě je výška B-stromu log M n, v nejhorším případě log M/2 n, kde M je maximální počet potomků minimalizace přístupů (diskových operací) - rozsáhlé stromy, je možno rozdělit na stránky uložené na disku. Aplikace: indexace tabulek v DBMS (DB2, MS SQL, Oracle, MySQL,...), indexace metadat v souborových systémech (NTFS, IBM JFS,...) B+ stromy 63

64 3 Algoritmy vyhledávání 1. Vyhledání prvku s klíčem k. Načtení stránky do paměti. Vyhledání ve stránce (sekvenčně, binárním půlením). Pokud se klíč ve stránce nenachází a stránka není list, hledáme 64 ve stránce c 1, pokud key < k 1, ve stránce c m, pokud key > k (m 1), m je aktuální počet prvků ve stránce ve stránce c i, kde k i < k < k i Přidání Najdeme místo i pro vložení nového prvku s klíčem k, tak aby k i 1 < k < k i+1. Pokud je ve stránce volné místo jednoduše vložíme nový prvek. Pokud je stránka plná, je nutné přeuspořádání: Rozdělíme stránku (2n + 1 prvků) na dvě podstránky stránky po n prvcích, prostřední prvek zůstává v rodičovské stránce. Pokud přeteče kořen stromu, výška stromu se zvětší.

65 3 Algoritmy vyhledávání Odebírání prvků z B-stromu Pokud se odebíraný prvek nenachází v listové stránce, musí se nahradit jedním ze dvou lexikograficky sousedících prvků v listové stránce. sestoupíme ve směru pravého ukazatele až do nejlevější listové stránky P, nahradíme odebíraný prvek nejlevějším prvkem stránky P a snížíme velikost obsazení P (v podstatě hledáme nejmenší větší klíč, resp. následovníka z uspořádané posloupnosti klíčů). Alternativně lze sestupovat ve směru levého ukazatele k nejpravějšímu prvku. Kontrola počtu prvků m ve stránce P: je-li m < n, je nutné provést reorganizaci - obsazení sousedních stránek P a Q se vyrovnává = vyvažování. V případě, že stránka Q již dosáhla své minimální velikosti n, pak celkový počet prvků na stránkách P a Q je 2n-1 a stránky můžeme sloučit: 65 do stránky P přesuneme "prostřední" prvek stránky předchůdců P a Q do stránky P přesuneme prvky ze stránky Q a stránku Q zrušíme. Postup může vyvolat další vyvažováníči slučování stránek na vyšší úrovni, v extrémním případě až po kořen B-stromu. Když se velikost kořenové stránky zmenší na nulu, je třeba ji odstranit (jediný způsob zmenšení výšky B-stromu).

66 3 Algoritmy vyhledávání B+ stromy Jsou modifikací B-stromů tak, že klíče jsou zopakovány v následnících a listové stránky jsou navzájem propojeny obousměrnými spojkami: B+ stromy se používají v moderních databázích jako forma indexních souborů. Při klasickém vyhledávání se postupuje prakticky stejně jako u obyčejných B-stromů. Ukazatele (diskové adresy dat) se nacházejí jen v listech. B+ stromy jsou velmi výhodné z hlediska vytváření uspořáda-ných pohledů na data. Stačí procházet listy stromu a tím získávat data setříděná podle konkrétního klíče. Z důvodů optimalizace přístupové doby korespondují stránky s diskovými bloky. Nevýhodou je opakování klíčů a složitější údržba stromů. 66

67 3 Komprimace dat Členění: bezeztrátová komprimace v procesu komprimace/dekomprimace jsou originální data přesně obnovena ztrátová komprimace v procesu komprimace/dekomprimace může dojít k odchylkám od originálních dat Claude E. Shannon: A Mathematical Theory of Communication (1948) formulace teorie komprimace dat, definoval fundamentální limit pro bezeztrátovou kompresi míru entropie H, která závisí na povaze informačního zdroje. Není možné bez ztráty informace komprimovat data v poměru vyšším než je míra entropie. Teorie datové komprese vymezuje základní hranice účinnosti všech komprimačních algoritmů. Pro daný zdroj se známou statistickou povahou a danou míru zkreslení D, je možné nalézt tzv. rate-distortion function R(D), udávající pro přípustnou míru zkreslení nejlepší dosažitelný kompresní poměr R(D). 67

68 3 Komprimace dat Zdroj má entropii H a dokonalý přenosový kanál kapacitu C; průměrná rychlost přenosu nemůže být větší než H/C. Důsledek nelze zkomprimovat informační zdroj pod velikost jeho entropie. Entropii H Shannon definoval pro stochastické procesy takto (počet bitů na znak): Důležité vlastnosti pro komprimaci: kde m je velikost vstupní abecedy a p i je pravděpodobnost výskytu znaku i 1. H = 0 pouze v případě, že existuje jediné i takové, že pi > 0 uniformní zpráva mající všechny znaky stejné, bude mít entropii jdoucí k nule (můžeme ji zakódovat do jediného znaku). 2. Pro daný počet jevů n je H maximální, jestliže všechny jevy mají stejnou pravděpodobnost p = 1/n. V takovém případě je H rovno log n. náhodně generovaná zpráva s rovnoměrným rozložením má entropii rovnou její velikosti v bitech děleno počtem symbolů (maximální entropie). 68

69 3 Komprimace dat Modely Informační zdroj X={X1,X2,...}, angl.text, velikost abecedy m=27 Zero-Order Model: znaky statisticky nezávislé, pravděpodobnost výskytu jednotlivých znaků je shodná. Potom H = log 2 m, tj. H = log 2 27 = 4.75 [bitů/znak] First-Order Model: znaky statisticky nezávislé, p i je pravděpodobnost výskytu i-tého znaku abecedy. Potom, tj. pro angl.text 4.07 bitů/znak. 69

70 3 Komprimace dat Second-Order Model: Nechť P j i je podmíněná pravděpodobnost, že aktuální symbol je j-tý znak abecedy, jestliže předchozí symbol je i-tý znak. Potom, tj bitů/znak pro angl.text Third-Order Model: Nechť P k j,i je podmíněná pravděpodobnost, že aktuální symbol je k-tý znak abecedy, jestliže předchozí symbol je j-tý znak abecedy, kterému předchází i-tý znak. Potom, tj bitů/znak pro angl.text Model lze zobecnit. Shannon odhadl, že entropie angl.textu je 2.3 bitů/znak. 70

71 Statistical Distributions of English Text (EXAMPLES) I. First-Order Statistics a b c d e f g h i j k ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= II. Second-Order Statistics The second number in the first row is the conditional probability P(Xi=b Xi-1=a)= a b c d e f g h i j ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= a b c III. Third-Order Statistics The fourth number in the second row is the conditional probability P(Xi=d Xi-1=b,Xi-2=a)= a b c d e f g h i j ========= ========= ========= ========= ========= ========= ========= ========= ========= ========= a a a b a c a d a e

72 RLE (Run Length Encoding) Jednoduchý bezeztrátový komprimační algoritmus, kompresní poměr silně závislý na charakteru dat pokud neobsahovují delší sekvence stejných znaků, účinost komprese výrazně klesá. RLE nahrazuje sekvence stejných hodnot dvojicí (délka sekvence, hodnota). Předpokládejme např. řetězec dat (17 bytů): ABBBBBBBBBCDEEEEF Pomocí RLE komprese lze zkomprimovat např. takto: (10 bytů) : A *8B C D *4E F Opakující se znaky jsou nahrazeny řídícím znakem a dvojicí (délka,znak). Existující různé modifikace. Aplikace pro kompresi obrazových dat, který obsahuje větší plochy stejné barvy. V grafických formátech existují různé varianty RLE komprese, buď jako hlavní komprese dat (např. PCX) nebo jako pomocná metoda komprese dat (JPEG, TIFF). Typické užití pro TIFF CCITT fax formát. 72

73 3 Komprimace dat Huffmanovo kódování bezeztrátová komprese dat, konvertuje znaky vstupní abecedy do bitových řetězců frekventované znaky do bitových řetězců s kratší délkou Dvě fáze: 1. určení frekvence výskytu znaků, 2. vytvoření binárního stromu k následné komprimaci vstupních dat. Jsou-li znaky např. E,T,A,S,N,O, uspořádány v binárním stromu: Potom TEA SEA TEN

74 3 Komprimace dat Příklad konstrukce stromu: 74

75 3 Komprimace dat Příklad: komprimace DECAF D: 111 E:1101 C:100 A: 0 F: Časová složitost Huffmanova algoritmu je O(n log 2 n). Příklad: dekomprimace : D 1101: E 100: C 0: A 1100: F DECAF 75

76 3 Komprimace dat LZ77, LZ78 a LZW algoritmus (Abraham Lempel, Jakob Ziv and Terry Welch) LZ77. Publikovaný Abrehamem Lempelem a Jacobem Zivem v roce patří mezi takzvané slovníkové algoritmy Algoritmus prochází data postupně od začátku do konce. V případě, že narazí na skupinu znaků, která se již v předchozích datech objevila, nahradí tuto skupinu znaků odkazem na předchozí výskyt. Komprimovaná data se pak skládají ze znaků, pro které nebyla nalezena žádná reference, tzv. literálů a referencí nahrazujících skupiny znaků. Mějme text: the quick brown fox jumps over the lazy dog. Slovo 'the' se vyskytuje dvakrát, lze komprimovat: the quick brown fox jumps over << lazy dog. kde << je pointer na prvníčtyři znaky v textu. 76

77 3 Komprimace dat Popis algoritmu LZ77: Při komprimaci se vytváří okno, které prochází přes sekvenci komprimovaných dat a v každém kroku hledá nejdelšíčást okna shodnou s předchozí sekvencí. Opakující se části dat odkazem na jejich původní výskyt, dvojicí (délka,offset) a připojí prvním následujícím znakem za ukazatelem. Poz Krok A A B C B B A B C Aktuální pozice Shoda okna se sekvencí Následující znak Výstup A (0,0)A 2. 2 A B (1,1)B C (0,0)C AB C (2,2)C Při dekomprimaci v každém kroku se čte ze vstupu pár (délka,ofset)znak ze vstupu a na výstup jde sekvence daná oknem (délka,ofset) a Znak.

78 3 Komprimace dat LZ78. Zatímco LZ77 pracuje na minulých datech, LZ78 se pokouší pracovat s budoucími daty. Prochází data a porovnává je se slovníkem, který udržuje. Dívá se dopředu v sekvenci a hledá co nejdelší sekvenci, nacházející se již ve slovníku. Na tu se pak odkazuje stejně jako v LZ77. Do slovníku je přidána sekvence společně s následujícím znakem, čímž slovník roste. Mějme opět text: the quick brown fox jumps over the lazy dog. Slovo 'the' se vyskytuje dvakrát, je tedy přidáno do slovníku a nahraženo odkazem *: * quick brown fox jumps over * lazy dog. 78

79 3 Komprimace dat LZW. Jde o modifikaci původního algoritmu, kterou vytvořil Terry Welch (1984). LZW pracuje, podobně jako LZ78, na principu udržování slovníku a odkazováním do něj. Na rozdíl od LZ78 si LZW slovník postupně vytváří spojováním kratších slov. Na počátku je slovník inicializován jednoznakovými slovy použité abecedy (typicky 256 znaků ASCII). Postupně, jak prochází sekvenci, ukládá do slovníku nalezené unikátní dvoupísmenné výrazy a jednopísmenné slovo vypíše na výstup. Tímto způsobem postupně skládá slova dohromady a rozšiřuje si tak slovník. set w := NIL loop read a character k if wk exists in the dictionary w := wk else output the code for w add wk to the dictionary w := k endloop 79 read a character k output k w := k loop read a character k entry := dictionary entry for k output entry add w + first char of entry to the dictionary w := entry endloop Animace:

80 3 Vyhledávání v řetězcích Nechť P je řetězec velikosti m, pak fragment P[i..j] se sestává z i-tého až j-tého znaku řetězce P prefixem (předponou) řetězce P je fragment typu P[0..i] sufixem (příponou) řetězce P je fragment typu P[i..m-1] Mějme řetězce T (text) a P (vzorek), pak úloha spočívá ve vyhledávání fragmentu P v řetězci T Typické algoritmy pro vyhledávání výskytů jednoho vzorku Brute-force Match - algoritmus hrubé síly Knuth-Morris-Prattův algoritmus porovnává vzorek s textem zleva doprava, ale posouvá vzorek inteligentněji než brute-force algoritmus Algoritmus Boyer-Moore algoritmus porovnává vzorek s textem od konce vzorku, tj. zprava doleva, při neshodě přeskakuje znaky Vyhledávání výskytů množiny vzorků Algoritmus Aho-Corasickové - algoritmus je založen na vyhledávání ve slovníku uspořádaném do tzv. keyword tree struktury (tzv. trie) s využitím konečného stavového automatu 80

81 3 Vyhledávání v řetězcích Brute-force Match Algoritmus hrubé síly porovnává vzorek P délky m s řetězcem T délky n pro každé možné posunutí P vůči T, dokud je nalezena shoda, nebo všechna umístění vzorku byla vyzkoušena Časová složitost je O(nm) Příklad pro nejhorší případ: 81 T = aaa ah, P = aaah Může se vyskytnout v binárních datech (např. v obrázcích), pro text je nepravděpodobné. T p a t t e r n m a i Algorithm BruteForceMatch(T, P) Input text T of size n, pattern P of size m Output starting index of a substring of T equal to P or 1 if no such substring exists for i 0 to n m { test shift i of the pattern } j 0 while j < m and T[i + j] = P[j] j j + 1 endwhile if j = m then return i {match at i} endfor return -1 {no match anywhere} P t e r n j

82 3 Vyhledávání v řetězcích Algoritmus Boyer-Moore Algoritmus se opírá o dvě heuristiky: Zrcadlová heuristika: Porovnej sekvenci v T se vzorkem P od konce, tj. zprava doleva Přeskakování znaků: Když nastane neshoda ve znaku T[i] = c Pokud P obsahuje c, posuň P tak, aby se shodoval poslední výskyt c v P s T[i], viz případ {A}; není-li posun doprava možný (poslední výskyt c je za aktuální pozicí), pak posuneme P doprava o jeden znak Pokud neobsahuje, posuň P tak, aby P[0] souhlasilo s T[i + 1], viz případ {B} Příklad: T= a pattern matching algorithm P= rithm t m T[i]= t T[i]= a a m T[i+1] 82 {A} {B} P[0]

83 3 Vyhledávání v řetězcích Boyer-Moorův algoritmus předzpracovává vzorek P a abecedu Σ tak, aby sestavil funkci posledního výskytu (last-occurrence) L mapujícíσna celá čísla, kde L(c) je definováno jako největší index i takový, kdy P[i] = c, nebo 1, pokud takový neexistuje Příklad: P = abacab, Σ = {a, b, c, d} a b a c a b c a b c d L(c) Funkce posledního výskytu L(c) může být reprezentována polem indexovaným podle numerického kódu znaku; funkce se napočítá pro vzorek P před vyhledáváním Časová složitost funkce L(c) je úměrná O(m + s), kde m je velikost P a s je velikost abecedy Σ Algoritmus je vhodný pro vyhledávání v textových řetězcích 83

84 3 Vyhledávání v řetězcích Algorithm BoyerMooreMatch(T, P, Σ) L(c)... lastoccurencefunction(p, Σ ) i m 1 j m 1 repeat if T[i] = P[j] if j = 0 84 index posledního znaku v příznaku P return i { match at i } else i i 1 j j 1 else { character-jump } l L[T[i]] i i + m min(j, 1 + l) j m 1 until i > n 1 return 1 { no match } Porovnej sekvenci v T s příznakem P od konce, tj. zprava doleva Když nastane neshoda, posuň P vůči T Pozn.: m...počet znaků v P, n...počet znaků v T pole P a T indexovány od nuly poslední výskyt v P před neshodou poslední výskyt v P za neshodou

85 3 Vyhledávání v řetězcích Příklad: Časová složitost Boyer-Moorova algoritmu je O(nm + s) Příklad pro nejhorší případ: T = aaa a, P = baaa Může se vyskytnout v binárních datech (např. v obrázcích), pro text je nepravděpodobné. Boyer-Moorův algoritmus je na textu výrazně rychlejší než brute-force algoritmus pro velkou abecedu Σ 85 c a b c d L(c)

86 3 Vyhledávání v řetězcích KMP algoritmus Knuth-Morris-Prattův algoritmus porovnává vzorek P s textem T zleva doprava, ale posouvá vzorek inteligentněji než bruteforce algoritmus Když dojde k neshodě, jak můžeme co nejvíce posunout vzorek P, abychom vyloučili redundantní porovnávání? Odpověď: Najdeme nejdelší prefix podřetězce P[0..j-1], který je i sufixem podřetězce P[1..j-1] 0 5 Není nutné porovnávání opakovat 0 2 Pokračovat v porovnávání odtud j=5 j=2 Nalezneme nejdelší předponu v "a b a a b" ( P[0..j 1] ), shodnou s příponou v "b a a b" ( P[1.. j 1] ): Odpověď: "a b" Nová hodnota j = 2 86

87 3 Vyhledávání v řetězcích Knuth-Morris-Prattův algoritmus předzpracovává vzorek, aby vyhledal shody prefixů vzorku se vzorkem samotným Funkce neshody (failure function) F(k) je definována jako délka nejdelšího prefixu podřetězce P[0..k], který je zároveň sufixem podřetězce P[1..k], kde k=j-1 je pozice před neshodou Knuth-Morris-Prattův algoritmus modifikuje prostý brute-force algoritmus tak, že pokud neshoda nastane v P[j] T[i], pokračujeme j F(j 1) k P(k) a b a a b a F(k) Není nutné porovnávání opakovat k = j-1 Pokračovat v porovnávání odtud 87

88 3 Vyhledávání v řetězcích Funkce neshody může být reprezentována polem a může být sestavena v čase O(m) Při každé iteraci ve while smyčce: i se zvyšuje o jedna, nebo posunutí i j se zvyšuje nejméně o jedna (přičemž F(j 1) < j) Smyčka tedy má složitost O(n) Algorithm KMPMatch(T, P) F failurefunction(p) i 0 j 0 while i < n if T[i] = P[j] if j = m 1 return i j { match } else i i + 1 j j + 1 else if j > 0 j F[j 1] else i i + 1 return 1 { no match } KMP s algoritmus běží v optimálním čase O(m + n) Algoritmus není příliš vhodný pro vyhledávání v textu (málo opakování v prefixu/sufixu), je vhodný pro binární data 88

89 3 Vyhledávání v řetězcích j k=5: j F(k)=2 k k=1: j F(k)= k=4: j F(k)= k=0: j F(k)=

90 4 Grafové algoritmy Základní pojmy Graf G je dvojice (V,E). Prvky množiny V jsou vrcholy a prvky jsou hrany. Neorientovaný graf G značíme G(V,E), kde V je množina vrcholů a E je množina dvojic vrcholů z V, hrana e = {u,v}. Vrcholy jsou body a hrany spojnice vrcholů Orientovaný graf G značíme G(V,E), kde V je množina vrcholů a E je množina uspořádaných dvojic vrcholů z V, hrana e = (u,v) počáteční vrchol hrany e se značí PV(e), koncový vrchol KV(e) hrany se značí šipkou ve směru od počátečního vrcholu neorientovaný graf lze převést na orientovaný nahrazením každé neorientované hrany {u,v} dvojicí orientovaných hran (u,v) a (v,u). Pokud hrana začíná a končí ve stejném vrcholu, jedná se o smyčku Pokud je více hran, které začínají ve stejném vrcholu a končí ve stejném vrcholu, říká se těmto hranám násobné a grafu se říka multigraf Počet vrcholů se značí V = n, počet hran se značí E = m Hranám a (nebo) vrcholům mohou být přiřazeny nějaké hodnoty. Takovému grafu se říká ohodnocený. 90

91 4 Grafové algoritmy Důležité množiny hran a vrcholů V(G) množina vrcholů grafu G E(G) množina hran grafu G Příklad: V(x) množina sousedních vrcholů vrcholu x V+(x) množina následníků vrcholu x; vrcholy, do kterých vede hrana z x V-(x) množina předchůdců vrcholu x; vrcholy, ze kterých vede hrana do x deg(x), d(x) stupeň vrcholu x; počet hran, jejichž je x krajní vrchol (smyčky počítáme dvakrát) deg + (x), d + (x) výstupní stupeň vrcholu x; počet hran vycházejících z x deg - (x), d - (x) vstupní stupeň vrcholu x; počet hran vcházejících do x 91

92 4 Grafové algoritmy Podgraf. Graf G je podgrafem grafu G, vznikne-li grafu G vynecháním nějakých (žádných) vrcholů a příslušných hran. Podgraf musí být stále grafem. Pokud je odebrán, musí být odebrány i všechny hrany, kterých je odebíraný vrchol součástí a pro každou hranu podgrafu do něo musí patřit oba krajní vrcholy. Faktor grafu. Graf G je faktorem grafu G, vznikne-li pouze vynecháním hran, tzn. V(G) = V(G ). Indukovaný (úplný) podgraf. Graf G je podgrafem indukovaným množinou vrcholů (úplným podgrafem na množině A), jestliže množina vrcholů G je A a obsahuje všechny hrany grafu G, jejichž oba krajní vrcholy patří do A. Sled. Posloupnost vrcholů a hran v0,e1,v1,e2,v2,...,en,vn nazýváme sledem, jestliže každá hrana ei spojuje vrcholy vi-1,vi (mohou se opakovat vrcholy i hrany) Tah. Sled, ve kterém se neopakuje žádná hrana, se nazývá tah. Cesta. Tah, ve kterém se neopakuje žádný vrchol se nazývá cesta. Uzavřený sled (tah,cesta) je sled (tah,cesta), který začíná a končí ve stejném vrcholu. 92

93 4 Grafové algoritmy Reprezentace grafu Seznam hran Příklad: Neorientovaný graf na obrázku má 5 vrcholů A až E a seznam hran AB, AC, AD, BD, CD, DE. Orientovaný graf má 4 vrcholy a až d a seznam hran ab, ac, ba, cb a dc. Matice sousednosti Matice sousednosti obsahuje jen nuly nebo jednicky. Je-li graf ohodnocený, pro každou hranu budeme ukládat do matice ohodnocení a ij hrany ij. Pokud a ij uložíme vzdálenost vrcholu i od vrcholu j, tak dostaneme matici vzdáleností. 93

94 4 Grafové algoritmy Seznam sousedů Orientovaný graf G = (V,E). Pro každý vrchol v si budeme pamatovat seznam jeho sousedů. Náhrada spojového seznamu - dvě pole: pole V[], obsahující ukazatele na začátky seznamů pole Sousedi[], obsahující seznamy sousedů všech vrcholů V[i] bude obsahovat index do pole Sousedi[], na kterém začíná seznam sousedů vrcholu i. Obě pole obsahují navíc zarážku. Přehled reprezentací Reprezentace Je uv hrana? Projít sousedy v Paměťová náročnost seznam hran O(m) O(m) O(m) matice sousednosti seznam sousedů O(1) O(n) O(n 2 ) O(n) O(#sousedů) O(n+m) 94

95 4 Grafové algoritmy Úloha procházení grafu pravidla pro efektivní průchod grafem každou hranou můžeme v každém směru projít maximálně jednou hranou, kterou do vrcholu vstoupíme poprvé, se smíme vrátit, až když z daného vrcholu nevede neprozkoumaná hrana hranou, kterou vstoupíme do již navštíveného vrcholu, se ihned vracíme zpět Vlastnosti konečnost zajišťuje první pravidlo - v každém kroku projdeme po jedné hrane, každou hranu jen jednou a hran je jen konečně mnoho korektnost v souvislém grafu projdeme všechny hrany. Nejde-li aplikovat žádné z pravidel, tak jsme v počátečním vrcholu a každou hranu jsme již prošli právě dvakrát složitost - O(n+m) pokud je práce na každém vrcholu a hraně konstatntní -čas za průchod je úměrný počtu hran m, které procházíme, a případná práce ve vrcholech počtu vrcholů n. 95

96 4 Grafové algoritmy Prohledávání do hloubky (DFS z anglického Depth First Search) V prvním vrcholu si vybereme jednu možnou hranu a po ní přejdeme do dalšího vrcholu. Všechny procházené hrany označujeme. V každém vrcholu, do kterého přejdeme, ověříme: Pokud jsme v již dříve navštíveném vrcholu, vrátíme se zpátky do předchozího vrcholu. Pokud je to dříve neprozkoumávaný vrchol, pokračujeme první možnou neprošlou hranou. Pokud taková hrana neexistuje, je vrchol zcela prozkoumán a vrátíme se do předchozího vrcholu. Tímto postupem projdeme celý graf a nakonec se vrátíme do výchozího vrcholu. 96

97 4 Grafové algoritmy Prohledávání do šířky (BFS z anglického Breadth First Search) průchod (prohledání grafu) ve vlnách tzv. algoritmus vlny. Vyjdeme z vrcholu všemi hranami (vlna) a při vstupu do dalších vrcholů se vlna znovu rozdělí po všech hranách. Graf prozkoumáváme po vlnách V první vlně se dostaneme do vrcholů, do kterých vede z výchozího vrcholu hrana. V druhé vlně se dostaneme do vrcholů, které jsou ve vzdálenosti 2 od výchozího vrcholu. Podobně v k-té vlně se dostaneme do vrcholu ve vzdálenosti k od výchozího vrcholu. Implementuje se obvykle tak, že při vstupu do nového vrcholu uložíme všechny možné cesty do fronty. Frontu průběžně zpracováváme. atd... 97

98 4 Grafové algoritmy Hledání nejkratší cesty v grafu Nechť G=(V,E) je souvislý graf. Nechť w je funkce přiřazující každé hraně e z E reálnou hodnotu (cenu hrany). Chceme najít nejlevnější (nejkratší) cestu ze startovního vrcholu do cílového vrcholu. Fakticky se hledají nejkratší sledy. Ty se ale rovnají nejkratším cestám, pokud ohodnocení hran grafu je nezáporné. Dijkstrův algoritmus je algoritmus pro nalezení nejkratší cesty v grafu z vrcholu s do vrcholu t. Je konečný, protože v každém průchodu cyklu se do množiny navštívených uzlů přidá právě jeden uzel (průchodů cyklem je nejvýše tolik, kolik má graf vrcholů). Funguje nad hranově kladně ohodnoceným grafem (neohodnocený graf lze na ohodnocený snadno převést). Předpokládáme: Graf je souvislý Graf má neorientované hrany Graf má nezáporně ohodnocené hrany Pro grafy s hranami se záporným ohodnocením se obvykle používá pomalejší Bellman-Fordův algoritmus. 98

99 4 Grafové algoritmy Dijkstrův algoritmus Mějme graf G, v němž hledáme nejkratší cestu. V je množina všech vrcholů grafu G, množina E obsahuje všechny hrany grafu G. Algoritmus pracuje tak, že si pro každý vrchol v z V pamatuje délku nejkratší cesty d[v], kterou se k němu dá dostat (na začátku: pro počáteční vrcholu s je d[s]=0, pro ostatní vrcholy d[v]= ). Množina Z obsahuje už navštívené vrcholy a N dosud nenavštívené. Algoritmus pracuje v cyklu tak dlouho, dokud N není prázdná. V každém průchodu cyklu se přidá jeden vrchol v min z N do Z, a to takový, který má nejmenší hodnotu d[v] ze všech vrcholů v z N. Relaxace hran: Pro každý vrchol u, do kterého vede hrana z v min, se provede následující operace: pokud (d[v min ] + l(v min,u)) < d[u], pak do d[u] d[v min ] + l(v min,u), jinak nic. Až algoritmus skončí, potom pro každý vrchol v z V je délka jeho nejkratší cesty od počátečního vrcholu s uložena v d[v]. 99 Příklad: d(u)=50, d(z)=60, e=10 d(z) min{d(z), d(u)+e} relaxovaná hrana

100 4 Grafové algoritmy N: B C D E F Z: A N: B E F Z: A C D N: F Z: A C D E B N: B D E F Z: A C N: B F Z: A C D E N: Z: A C D E B F 100

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

Databáze, sítě a techniky programování X33DSP

Databáze, sítě a techniky programování X33DSP Databáze, sítě a techniky programování X33DSP Anotace: Náplní předmětu jsou některé techniky a metody používané ve výpočetních systémech zaměřených na biomedicínské inženýrství. Cílem je položit jednotný

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

10. Složitost a výkon

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

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

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

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

Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CLIL jako výuková strategie na vysoké škole

Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CLIL jako výuková strategie na vysoké škole Pattern matching Metodický koncept k efektivní podpoře klíčových odborných kompetencí s využitím cizího jazyka ATCZ62 - CI jako výuková strategie na vysoké škole Pattern matching porovnávání vzorů Hledání

Více

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

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

Více

Dynamické datové struktury 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

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

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

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

TGH07 - Chytré stromové datové struktury

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

Více

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

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

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

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

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

Více

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 Datové struktury Daniela Szturcová

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

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

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 Datové struktury Daniela Szturcová

Více

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů:

1 2 3 4 5 6 součet cvičení celkem. známka. Úloha č.: max. bodů: skut. bodů: Úloha č.: max. bodů: skut. bodů: 1 2 3 4 5 6 součet cvičení celkem 20 12 20 20 14 14 100 známka UPOZORNĚNÍ : a) Písemná zkouška obsahuje 6 úloh, jejichž řešení musí být vepsáno do připraveného formuláře.

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

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

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

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

Více

Základní datové struktury

Základní datové struktury Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013

Více

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

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

Více

Lineární datové struktury

Lineární datové struktury Lineární datové struktury doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 13. března 2017 Jiří Dvorský (VŠB TUO) Lineární datové

Více

Základy algoritmizace. Pattern matching

Základy algoritmizace. Pattern matching Základy algoritmizace Pattern matching 1 Pattern matching Úloha nalézt v nějakém textu výskyty zadaných textových vzorků patří v počítačové praxi k nejfrekventovanějším. Algoritmy, které ji řeší se používají

Více

Algoritmy II. Otázky k průběžnému testu znalostí

Algoritmy II. Otázky k průběžnému testu znalostí Algoritmy II Otázky k průběžnému testu znalostí Revize ze dne 19. února 2018 2 Lineární datové struktury 1 1. Vysvětlete co znamená, že zásobník představuje paměť typu LIFO. 2. Co je to vrchol zásobníku?

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

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

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

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

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

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

Více

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

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

Dynamické datové struktury I.

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

Více

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

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

vyhledávací stromové struktury

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

Více

Algoritmy 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

AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující

AVL stromy. pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1 stromy jsou samovyvažující Stromy 2 AVL AVL stromy jména tvůrců stromů: dva Rusové Adelson-Velskii, Landis vyvážené binární stromy pro každý uzel u stromu platí, že rozdíl mezi výškou jeho levého a pravého podstromu je nejvýše 1

Více

TÉMATICKÝ OKRUH TZD, DIS a TIS

TÉMATICKÝ OKRUH TZD, DIS a TIS TÉMATICKÝ OKRUH TZD, DIS a TIS Číslo otázky : 13. Otázka : Základní datové struktury (pole, zásobník, binární strom atd.), datové struktury vhodné pro fyzickou implementaci relačních dat v SŘBD (hašovací

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ákladní informace o předmětu Otázka:

Základní informace o předmětu Otázka: Základní informace o předmětu Otázka: Proč vůbec porovnávat algoritmy? Vlastnosti algoritmů přirozenost a stabilita algoritmu časová náročnost algoritmu asymetrická a asymptotická časová náročnost algoritmů

Více

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007 Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků

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

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

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

Č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

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

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

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

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

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

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11 333LP - lgoritmy a programování - Zkouška z předmětu 333LP Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8]

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

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

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti.

Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Seznamy a stromy Cílem kapitoly je seznámit studenta se seznamem a stromem. Jejich konstrukci, užití a základní vlastnosti. Klíčové pojmy: Seznam, spojový seznam, lineární seznam, strom, list, uzel. Úvod

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

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

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

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

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

Vyhledávání v textu. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Vyhledávání v textu doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava Prezentace ke dni 9. března 209 Jiří Dvorský (VŠB TUO) Vyhledávání v textu 402

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

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11 Jméno Příjmení Už. jméno Marek oháč bohacm11 Zkouškový test Otázka 1 Jaká je hodnota proměnné count po vykonání následujícího kódu: data=[4,4,5,5,6,6,6,7,7,7,7,8,8] count=0 for i in range(1,len(data)):

Více

Algoritmizace prostorových úloh

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

Více

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

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

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

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

Datové typy a struktury

Datové typy a struktury atové typy a struktury Jednoduché datové typy oolean = logická hodnota (true / false) K uložení stačí 1 bit často celé slovo (1 byte) haracter = znak Pro 8-bitový SII kód stačí 1 byte (256 možností) Pro

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

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

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

Více

Standardní algoritmy vyhledávací.

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

Více

Zadání druhého zápočtového projektu Základy algoritmizace, 2005

Zadání druhého zápočtového projektu Základy algoritmizace, 2005 Zadání druhého zápočtového projektu Základy algoritmizace, 2005 Jiří Dvorský 2 května 2006 Obecné pokyny Celkem je k dispozici 8 zadání příkladů Každý student obdrží jedno zadání Vzhledem k tomu, že odpadly

Více

Da D to t v o é v ty t py IB111: Datové typy

Da D to t v o é v ty t py IB111: Datové typy Datové typy IB111: Datové typy Data a algoritmizace jaká data potřebuji pro vyřešení problému? jak budu data reprezentovat? jaké operaci s nimi potřebuji provádět? Navržení práce s daty je velice důležité

Více

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41 Obsah přednášky Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41 Analýza algoritmu Proč vůbec dělat analýzu? pro většinu problémů existuje několik různých přístupů aby

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

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

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Jiří Vyskočil, Marko Genyg-Berezovskyj 2010 Úvod stránky předmětu: https://cw.felk.cvut.cz/doku.php/courses/a4b33alg/start cíle předmětu Cílem je schopnost samostatné implementace různých variant základních

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

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

Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky

Komprese dat. Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI. přednášky Komprese dat Jan Outrata KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO V OLOMOUCI přednášky Statistické metody Jan Outrata (Univerzita Palackého v Olomouci) Komprese dat Olomouc, únor březen 2016 1 / 23 Tunstallův

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

Komprese dat (Komprimace dat)

Komprese dat (Komprimace dat) Komprese dat (Komprimace dat) Př.: zakódovat slovo ARARAUNA K K 2 četnost absolutní relativní A 4,5 N,25 R 2,25 U,25 kód K : kód K 2 :... 6 bitů... 4 bitů prefixový kód: žádné kódové slovo není prefixem

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

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4 Fronta (Queue) Ú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 Fronta uplatňuje mechanismus přístupu FIFO first

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

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze

NP-ÚPLNÉ PROBLÉMY. Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze NP-ÚPLNÉ PROBLÉMY Doc. RNDr. Josef Kolář, CSc. Katedra teoretické informatiky, FIT České vysoké učení technické v Praze BI-GRA, LS 2010/2011, Lekce 13 Evropský sociální fond Praha & EU: Investujeme do

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

Vyhledávání řetězců. a b a c a a b. a b a c a b. a b a c a b

Vyhledávání řetězců. a b a c a a b. a b a c a b. a b a c a b Vyhledávání řetězců (Pattern Matching) T: P: a b a c a a b a b a c a b 4 1 3 2 a b a c a b Přehled 1. Co je vyhledávání řetězců 2. Algoritmus hrubé síly (Brute force) 3. Algoritmus Boyer Moore 4. Knuth

Více

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Maturitní otázky z předmětu PROGRAMOVÁNÍ Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti

Více

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury)

autoři: Rudolf Bayer, Ed McCreight všechny vnější uzly (listy) mají stejnou hloubku ADS (abstraktní datové struktury) definice ( tree) autoři: Rudolf Bayer, Ed McCreight vyvážený strom řádu m ( ) každý uzel nejméně a nejvýše m potomků s výjimkou kořene každý vnitřní uzel obsahuje o méně klíčů než je počet potomků (ukazatelů)

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

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

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